gpt4 book ai didi

python - Django:如何迭代两个一对多表关系?

转载 作者:行者123 更新时间:2023-11-30 22:15:59 25 4
gpt4 key购买 nike

我正在尝试构建一个简单的网页来查询三个表。有一个 Company 表与 Position 表具有一对多关系,并且与 Project< 具有一对多关系表。

目标是让页面显示一次给定的公司,以及与该公司相关的所有职位和项目。然后,继续显示下一家公司、在那里担任的任何职位以及已完成的项目。

下面是我最接近正确的结果。但是,明显的问题是,如果有多个项目与某一特定公司相关,您会看到该公司多次列出。

我是 Django 的新手,所以为了学习的兴趣,我想在寻求帮助之前先好好地敲敲自己的脑袋;但此时我确实可以使用一些新的想法。

另外:我可以看到嵌套 for 循环如何在这里工作,但我只是不清楚它的机制如何与查询一起工作,然后在模板中工作。

型号:

from django.db import models


class Company(models.Model):
company_id = models.AutoField(primary_key=True)
company_name = models.CharField(max_length=20)
company_logo = models.ImageField(upload_to='images/')

def __str__(self):
return self.company_name

class Position(models.Model):
position_id = models.AutoField(primary_key=True)
position_title = models.CharField(max_length=55)
company_id = models.ForeignKey('professional.Company',
on_delete=models.CASCADE,
blank=True,
null=True)
begin_date = models.DateField()
end_date = models.DateField()

def __str__(self):
return self.position_title

class Project(models.Model):
project_id = models.AutoField(primary_key=True)
project_name = models.CharField(max_length=55)
company_id = models.ForeignKey('professional.Company',
on_delete=models.CASCADE,
blank=True,
null=True)
project_description = models.CharField(max_length=500)
project_image = models.ImageField(upload_to='images/')

def __str__(self):
return self.project_name

查看:

from django.views.generic import TemplateView, ListView

from professional.models import Company



class ProfessionalHome(TemplateView):
template_name = 'professional/professional_home.html'


class TechnologyListView(ListView):
template_name = 'professional/__technology.html'
context_object_name = 'technology_list'

def get_queryset(self):
return Company.objects.values('company_name','position__position_title', 'project__project_name')

HTML 和模板:

{% for job in technology_list %}

<h1>{{job.company_name}}</h1>
<h1>Position: {{job.position__position_title}}</h1>
<h1>project: {{job.project__project_name}}</h1>

{% endfor %}

最佳答案

您可以返回实际的查询集,然后对其进行迭代以构建 View ,而不是使用 get_queryset 方法中的值。

def get_queryset(self):        
return Company.objects.all()

然后在您的模板中:

{% for job in technology_list %}

<h1>{{job.company_name}}</h1>
{% for position in job.position_set.all() %}
<h1>Position: {{position.position_title}}</h1>
{% endfor %}
{% for project in job.position_set.all() %}
<h1>project: {{project.project_name}}</h1>
{% endfor %}

{% endfor %}

关于python - Django:如何迭代两个一对多表关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50096784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com