Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:模板中的关系视图[多对一关系]_Django_Django Models_Orm_Jinja2_Python 3.7 - Fatal编程技术网

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”`。然后我得到了。