如何迭代两个Django模型

2024-10-01 15:37:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我的django项目中有多个模型。我想迭代它们,以便在django模型字段中访问它们。我该怎么做

我尝试过在我的视图中压缩它们。py like:

inventory = Inventory.objects.all()
header = Header.objects.all()
setup = Setup.objects.all()
revision = Revisions.objects.all()
spec = SpecificationDetails.objects.all()
review = Reviewers.objects.all()

zippedItems = zip(inventory, header, setup, revision, spec, review)
context = {
        'zippedItems':  zippedItems

}
return render(request, 'crud/dashboard.html', context)

在我的模板文件中,我尝试了

{%for items in zippedItems %}
<td>{{items}}</td>
{% endfor %}

但它不起作用,而且我认为它没有压缩对象。关于如何做到这一点,有什么建议吗


Tags: 项目django模型objectssetupcontextitemsrevision
3条回答

我假设您的库存、标题、设置、修订、规格和审查的元素数量相似。请记住,如果元素的数量不同,那么它将至少计算一个

请查看下面的zip示例,以便更好地理解

ZIP示例:

inventory = [1, 2, 3, 4]
header = [5, 6, 7, 8]
setup = [9, 10, 11, 12]
revision = [13, 14, 15, 16]
spec = [17, 18, 19, 20]
review = [21, 22, 23, 24, 25, 26]

zippedItems = zip(inventory, header, setup, revision, spec, review)

for inventory, header, setup, revision, spec, review in zippedItems:
    print(f'inventory: {inventory} - header: {header} - setup: {setup} - revision: {revision} - spec: {spec} - review: {review}')

输出:

inventory: 1 - header: 5 - setup: 9 - revision: 13 - spec: 17 - review: 21
inventory: 2 - header: 6 - setup: 10 - revision: 14 - spec: 18 - review: 22
inventory: 3 - header: 7 - setup: 11 - revision: 15 - spec: 19 - review: 23
inventory: 4 - header: 8 - setup: 12 - revision: 16 - spec: 20 - review: 24

From output you can see that it didn't print the last values of review list as those are not in range of 4.

您可以保持此代码原样:

inventory = Inventory.objects.all()
header = Header.objects.all()
setup = Setup.objects.all()
revision = Revisions.objects.all()
spec = SpecificationDetails.objects.all()
review = Reviewers.objects.all()

zippedItems = zip(inventory, header, setup, revision, spec, review)
context = {
        'zippedItems':  zippedItems

}
return render(request, 'crud/dashboard.html', context)

您对HTML部分有问题。应该是这样的:

{% for inventory, header, setup, revision, spec, review in zippedItems %}
    {{ forloop.counter }}
    {{ inventory.model_field_name }}
    {{ header.model_field_name }}
    {{ setup.model_field_name }}
    {{ revision.model_field_name }}
    {{ spec.model_field_name }}
    {{ review.model_field_name }}
{% endfor %}

如果您仍然面临任何问题,请告诉我。:)

请像这样的用户将queryset模型转换为List,然后将它们添加到List中…所有List的类型都是List of tuple。 然后 您必须将列表转换为zip。。 将此zip文件传递给pandas dataframe。这将自动管理zip文件并以正确的列格式提供数据

inventory = list(Inventory.objects.all())
header = list(Header.objects.all())
setup = list(Setup.objects.all())
revision = list(Revisions.objects.all())
spec = list(SpecificationDetails.objects.all())
review = list(Reviewers.objects.all())
iterates = inventory + header + setup + revision + spec + review

zip_file = list(zip(iterates))

import pandas as pd

df = pd.DataFrame(zip_file, columns = ['Inventory', 'Header','Setup','Revisoin','Spec','Review'])

context = {
        'df':  df
}
return render(request, 'crud/dashboard.html', df)

我认为您可以先列出查询集,然后将它们组合在一起

inventory = list(Inventory.objects.all())
header = list(Header.objects.all())
setup = list(Setup.objects.all())
revision = list(Revisions.objects.all())
spec = list(SpecificationDetails.objects.all())
review = list(Reviewers.objects.all())
iters = inventory + header + setup + revision + spec + review

相关问题 更多 >

    热门问题