Django:模板中的关系视图[多对一关系]
我的模型中有多对一的关系。我想在Django:模板中的关系视图[多对一关系],django,django-models,orm,jinja2,python-3.7,Django,Django Models,Orm,Jinja2,Python 3.7,我的模型中有多对一的关系。我想在html表中查看与父表相关的子表数据。这是我的模型.py: class DataCollection(models.Model): default_name = models.CharField(max_length=100) class NameHistory(models.Model): old_name = models.CharField(max_length=100) collection_data = models.Forei
html表
中查看与父表相关的子表数据。这是我的模型.py:
class DataCollection(models.Model):
default_name = models.CharField(max_length=100)
class NameHistory(models.Model):
old_name = models.CharField(max_length=100)
collection_data = models.ForeignKey(DataCollection, on_delete=models.CASCADE, null=True)
下面是我的观点.py:
def dashboard(request):
foo = ( DataCollection.objects
.annotate(
first_old_name=Window(
expression=FirstValue('namehistory__old_name'),
partition_by=[F('id'), ],
order_by=F('namehistory__id').desc()
)
)
.values_list('first_old_name', flat=True)
.distinct()
)
context = {
'sample': foo,
'dashboard': DataCollection.objects.all(),
'title':'Dashboard'
}
return render(request, 'dashboard/dashboard_form.html', context)
我的问题是,如何在与DataCollection
表的id
相关的模板中查看此键sample
的数据
以下是我的模型中的示例数据,DataCollection
:
以下是NameHistory
的示例数据:
所以在我的html表中
应该是这样的:
我尝试过这种代码,但我不知道为什么它总是返回无名称
:
<tbody>
{% for data in dashboard %}
<tr>
<td>{{ data.default_name }}</td>
{% for item in sample.namehistory_set.all %}
<td>{{ item.old_name }}</td>
{% empty %}
<td> No Name </td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
{%用于仪表板%中的数据}
{{data.default_name}
{sample.namehistory_set.all%中的项的%
{{item.old_name}
{%empty%}
没有名字
{%endfor%}
{%endfor%}
您应该为仪表板/表使用带注释的查询集,因为它将在每个对象上注释旧名称
foo = DataCollection.objects.annotate(
first_old_name=Window(
expression=FirstValue('namehistory__old_name'),
partition_by=[F('id'), ],
order_by=F('namehistory__id').desc()
)
)
context = {
'dashboard': foo,
'title':'Dashboard'
}
然后在模板中
<tbody>
{% for data in dashboard %}
<tr>
<td>{{ data.default_name }}</td>
<td>{{ data.first_old_name:default"No Name" }}</td>
</tr>
{% endfor %}
</tbody>
{%用于仪表板%中的数据}
{{data.default_name}
{{data.first\u old\u name:默认的“No name”}
{%endfor%}
您应该为仪表板/表使用带注释的查询集,因为它将在每个对象上注释旧名称
foo = DataCollection.objects.annotate(
first_old_name=Window(
expression=FirstValue('namehistory__old_name'),
partition_by=[F('id'), ],
order_by=F('namehistory__id').desc()
)
)
context = {
'dashboard': foo,
'title':'Dashboard'
}
然后在模板中
<tbody>
{% for data in dashboard %}
<tr>
<td>{{ data.default_name }}</td>
<td>{{ data.first_old_name:default"No Name" }}</td>
</tr>
{% endfor %}
</tbody>
{%用于仪表板%中的数据}
{{data.default_name}
{{data.first\u old\u name:默认的“No name”}
{%endfor%}
我遇到一个错误,无法解析剩余部分:':default“No Name”from“data”。首先\u old\u Name:default“No Name”'
我试图删除'default“No Name”`。然后我得到了。我遇到一个错误,无法分析剩余部分:':default“No Name”from“data”。首先\u old\u Name:default“No Name”
我试图删除'default“No Name”`。然后我得到了。