Я использую django -tables2 для отображения информации в моей базе данных. BuildingDetailTable и EnergyTable находятся в одном шаблоне и хотят, чтобы они были эквивалентом DetailView одного объекта в моей базе данных. В тот момент, когда я выбираю строку в BuildingListTable в моем BuildingListView, страница переходит на правильную страницу building_detail, но BuildingDetailTable и EnergyTable отображают все объекты в базе данных, и я не знаю, как отфильтровать их только для строки для объект интереса.
Мой сокращенный код:
#models.py
class AnnualUse(models.Model):
elec = models.IntegerField(default=0, verbose_name='Elec kWh')
gas = models.IntegerField(default=0, verbose_name='Gas ccf')
wtr = models.IntegerField(default=0, verbose_name='WTR kgal')
fiscal_year = models.ForeignKey(FiscalYear, on_delete=models.CASCADE)
building = models.ForeignKey('Building', on_delete=models.CASCADE)
def __str__(self):
return '%s %s' % (self.building, self.fiscal_year)
class Building(models.Model):
id = models.UUIDField(
primary_key=True,
default=uuid.uuid4,
editable=False)
acronym = models.CharField(max_length=3)
full_name = models.CharField(max_length=200)
area = models.IntegerField()
notes = models.TextField(blank=True)
use_type = models.ForeignKey(UseType, on_delete=models.CASCADE)
zone = models.ForeignKey(Zone, on_delete=models.CASCADE)
def __str__(self):
return self.acronym
def get_absolute_url(self):
return reverse('building_detail', args=[str(self.id)])
# tables.py
class BuildingListTable(tables.Table):
acronym = tables.Column(linkify=True)
class Meta:
model = Building
fields = ('acronym', 'full_name', 'use_type', 'area')
class EnergyTable(tables.Table):
class Meta:
model = AnnualUse
fields = ('fiscal_year', 'elec', 'gas', 'wtr')
class BuildingDetailTable(tables.Table):
class Meta:
model = Building
fields = ('acronym', 'full_name', 'use_type', 'area', 'zone', 'notes')
#views.py
class BuildingListView(SingleTableView):
model = Building
table_class = BuildingListTable
template_name = 'buildings/building_list.html'
class BuildingDetailView(MultiTableMixin, TemplateView):
template_name = 'buildings/building_detail.html'
table_pagination = {"per_page": 20}
def get_tables(self):
b = Building.objects.all()
au = AnnualUse.objects.all()
return [
BuildingDetailTable(b),
EnergyTable(au)
]
#building_detail.html
{% load django_tables2 %}
{% for table in tables %}
{% render_table table %}
{% endfor %}