Как правильно вывести данные из бд в шаблон? Django

Такая проблема: есть раздел с жилыми комлексами, у каждого жк есть отдельная страничка, на которой находятся карточки с домами. Хочу, чтобы при нажатии на карточку дома, выводилась информация этого дома из бд. (При нажатии на кнопку "Подробнее", с помощиью js у блока карточки изменяется свойство с display: none; на display: block;) введите сюда описание изображения

views.py

from django.shortcuts import render
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.views.generic import DetailView
from .models import *


def service(request):
    active = ['service']
    return render(request, 'service/service.html', locals())


def catalog_nb(request):
    active = ['service']
    complex_list = Complex.objects.all()
    paginator = Paginator(complex_list, 3)

    page = request.GET.get('page')
    try:
        complexes = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        complexes = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        complexes = paginator.page(paginator.num_pages)
    page_range = paginator.page_range
    return render(request, 'service/catalog-nb.html', {"complexes": complexes,
                                                       "page_range": page_range,
                                                       "active": active})


class ComplexDetailView(DetailView):
    active = ['service']
    model = Complex
    template_name = 'service/complex.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['gallery'] = ComplexGallery.objects.filter(complex=context['complex'])
        context['houses'] = House.objects.filter(complex=context['complex'])
        context['apartments'] = {h.pk: Apartment.objects.filter(house=h) for h in context['houses']}
        print(context['apartments'])

        return context

Шаблон

    {% extends 'base.html' %}
    
    {% block content %}
    {% load static %}
    
      <div class="continer block">
        <div class="row "  id="all">
          <div class="col-lg-10 offset-1">
            <h1>{{ complex.name }}</h1>
            <hr width="271px" >
    
            <div class="descr-section">
              <h2 class="complex-section">Описание жилого комлекса</h2>
              <p class="complex-descr">{{ complex.description }}</p>
            </div>
    
            <div class="descr-section">
              <h2>Расположение</h2>
              <div class="map"></div>
            </div>
    
    
            <div class="gallery-section">
              <h2 class="text-left">Фотографии</h2>
    
                <div class="gallery-i">
                  {% if gallery %}
                    {% for img in gallery %}
                      <div class="col-lg-3 col-sm-5 thumb">
                        <a data-fancybox="gallery" href="{{ img.gal_img.url }}">
                          <img class="img-fluid" src="{{ img.gal_img.url }}" alt="...">
                        </a>
                      </div>
                    {% endfor %}
                  {% endif %}
                </div>
          </div>
    
          <div class="house-section">
            <h2 class="text-left">Дома</h2>
            <div class="h-cards-wrapper">
              {% for house in houses %}
    
              <div class="h-card">
                <div class="h-card-info">
                  <p class="house-title">Дом {{ house.house_number }}</p>
                     <button class="btn btn-primary read-more h-btn" id="showCard" onClick="viewHouseCard()" >
                      Подробнее
                    </button>
                </div>
              </div>
    
              <div class="house-card" id="house-card">
                <button class="closeCard" onClick="closeHouseCard()">
                  <i class="fa fa-times" aria-hidden="true"></i>
                </button>
    
                <div class="card-content">
                  <h1 class="white h-card-title">Дом {{ house.house_number }}</h1>
                  <table class="table-container">
    
                    <tr>
                      <th>Номер <br> квартиры</th>
                      <th>Этаж</th>
                      <th>Кол-во <br> комнат</th>
                      <th>Площадь</th>
                      <th>Отделка</th>
                      <th>Цена <br> за м2</th>
                      <th>Цена за <br> объект</th>
                      <th>Планировка</th>
                    </tr>
    
                    <tr>
                      <!--Тут надо что-то делать с циклом for, но не понимаю что именно(-->
                    <tr>
                      <td>{{ap.apartment_number}}</td>
                      <td>{{ap.level}}</td>
                      <td>{{ap.room}}</td>
                      <td>{{ap.square}}</td>
                      <td>{{ap.finishing}}</td>
                      <td>{{ap.price_m}}</td>
                      <td>{{ap.price_total}}</td>
                      <td><button class="view-plan" onClick="viewHousePlan()"><i class="fa fa-eye" aria-hidden="true"></i></button></td>
                     </tr>
<!--                  {% endfor %}-->
                     </tr>
    
                  </table>
                </div>
              </div>
    
            {% endfor %}
            </div>
          </div>
        </div>
      </div>
    
    {% endblock %}

models.py

from django.db import models
from .utils import *


class Complex(models.Model):
    name = models.CharField(max_length=50)
    slug = models.SlugField(blank=True)
    description = models.TextField()
    img = models.ImageField(upload_to='complex/', blank=True)

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = from_cyrillic_to_eng(str(self.name))
        super().save(*args, **kwargs)

    def __str__(self):
        return '%s' % self.name


class ComplexGallery(models.Model):
    complex = models.ForeignKey(Complex, on_delete=models.CASCADE, blank=True)
    gal_img = models.ImageField(upload_to='complex/gallery/', blank=True)

    def __str__(self):
        return '%s' % self.complex.name


class House(models.Model):
    complex = models.ForeignKey(Complex, on_delete=models.CASCADE, blank=True)
    house_number = models.IntegerField()

    def __str__(self):
        return '%s' % self.house_number


class Apartment(models.Model):
    house = models.ForeignKey(House, on_delete=models.CASCADE, blank=True)
    apartment_number = models.IntegerField()
    level = models.IntegerField()
    room = models.IntegerField()
    square = models.FloatField()
    finishing = models.BooleanField(default=False)
    price_m = models.DecimalField(max_digits=7, decimal_places=1)
    price_total = models.DecimalField(max_digits=10, decimal_places=1)
    plan_img = models.ImageField(upload_to='complex/apartment/', blank=True)

    def __str__(self):
    return '%s' % self.apartment_number

Ответы (1 шт):

Автор решения: Vadim.Sharoikin

К связанным моделям обращаются через ключевое слово _set, если не указанно related_name. Если я вас правильно понял.

{% for ap in house.apartment_set.all %}
<tr>
    <td>{{ap.apartment_number}}</td>
    <td>{{ap.level}}</td>
    <td>{{ap.room}}</td>
    <td>{{ap.square}}</td>
    <td>{{ap.finishing}}</td>
    <td>{{ap.price_m}}</td>
    <td>{{ap.price_total}}</td>
    <td><button class="view-plan" onClick="viewHousePlan()"><i class="fa fa-eye" aria-hidden="true"></i></button></td>
</tr>
{% endfor %}
→ Ссылка