我可能错过了一些简单的东西。我只是缺乏知识或一些如何。我有两个模型,一个是site
,另一个是siteField
和最重要的一个-siteFieldValue
。
我的想法是创建一个django表(针对site
),使用siteFieldValue
中的值作为一行中的数字,针对特定的站点,在特定的标题下。问题是-每个站点可以有50个这样的值。* def render_
函数指定的列数 * 站点数等于大量的查询,我希望避免这种情况。
我的问题是--例如,是否有可能预取每个站点(SiteFieldValue.objects.filter(site=record).first()
在SiteListTable
类中的某个位置)的所有值,将它们放入一个数组中,然后通过简单地检查分配给键的值(字段的id),在def render_
函数中使用它们。
型号:
class Site(models.Model):
name = models.CharField(max_length=100)
class SiteField(models.Model):
name = models.CharField(max_length=100)
description = models.CharField(max_length=500, null=True, blank=True)
def __str__(self):
return self.name
class SiteFieldValue(models.Model):
site = models.ForeignKey(Site, on_delete=models.CASCADE)
field = models.ForeignKey(SiteField, on_delete=models.CASCADE)
value = models.CharField(max_length=500)
表格视图
class SiteListTable(tables.Table):
name = tables.Column()
importance = tables.Column(verbose_name='Importance',empty_values=())
vertical = tables.Column(verbose_name='Vertical',empty_values=())
#... and many more to come... all values based on siteFieldValue
def render_importance(self, value, record):
q = SiteFieldValue.objects.filter(site=record, field=1).first()
# ^^ I don't want this!! I would want the SiteFieldValue to be prefetched somewhere else for that model and just check the array for field id in here.
if (q):
return q.value
else:
return None
def render_vertical(self, value, record):
q = SiteFieldValue.objects.filter(site=record, field=2).first()
# ^^ I don't want this!! I would want the SiteFieldValue to be prefetched somewhere else for that model and just check the array for field id in here.
if (q):
return q.value
else:
return None
class Meta:
model = Site
attrs = {
"class": "table table-striped","thead" : {'class': 'thead-light',}}
template_name = "django_tables2/bootstrap.html"
fields = ("name", "importance", "vertical",)
1条答案
按热度按时间46qrfjad1#
这也许能让你开始。我把它分成几个步骤,但它们很容易被锁起来。
现在,您有了一个字典列表,例如[{'name':site__name,'col 1 name':value...],可以按照table 2 docs中所示添加它