python - 如何通过发送与模型相关的 objects.all() 来获取外键
问题描述
我不知道如何在模板中检索与外键相关的数据。我将向您展示我现在拥有的东西,这将为您解决问题。
公司简介:
class CompanyProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, related_name='company_profile')
company_name = models.CharField(max_length=30)
def __str__(self):
return self.company_name
工作:
class Job(models.Model):
user = models.ForeignKey(CompanyProfile, on_delete=models.CASCADE)
title = models.CharField(max_length=300)
is_active = models.BooleanField(default=True)
def __str__(self):
return self.title
工作职能:
class JobFunction(models.Model):
job = models.ForeignKey(Job, on_delete=models.CASCADE, null=True)
name = models.CharField(max_length=60)
def __str__(self):
return self.name
风景:
def show_jobs(request):
jobs = Job.objects.all()
job_type = JobFunction.objects.all()
context = {
'jobs': jobs,
'job_type': job_type,
}
return render(request, 'jobportal/jobs/browse-job.html', context, {
})
一个 Job 可以有多个 Job Functions,或者只有 1 个没关系,但我需要得到 JobFunction 与 Job 相关的那个。我执行以下操作:
{% for job in jobs %}
{{ job.title }}
{% for jf in job_type %}
{{ jf.name }}
{% endfor %}
{% endfor %}
“工作”显示一切正常,但 jf 不是动态的,它在列表中的所有工作中显示相同的功能。循环有一个 id,我的意思是我想说 job.id = job_type.id 但我该怎么做呢?我想为每个工作项显示与特定工作/公司相关的 job_functions。
解决方案
无需传递JobFunction
s 的列表,您可以使用 反向查询关系job.jobfunction_set
:
{% for job in jobs %}
{{ job.title }}
{% for jf in job.jobfunction_set.all %}
{{ jf.name }}
{% endfor %}
{% endfor %}
请注意,在您看来,您最好使用.prefetch_related(..)
调用 [Django-doc]在一个数据库调用中获取所有相关JobFunction
的 s,并在 Django/Python 级别执行“加入”过程:
def show_jobs(request):
jobs = Job.objects.prefetch_related('jobfunction')
context = {
'jobs': jobs
}
return render(request, 'jobportal/jobs/browse-job.html', context)
推荐阅读
- sql - SQL查询_count
- reportbuilder3.0 - 基于参数的报表中的多个 Tablix 显示
- python - 如何在没有python中的熊猫的情况下删除csv文件中的重复行?
- c# - MVC QueryString 参数在 & 之后突然不读取
- scala - Scala中Ad-hoc多态和参数多态的区别
- java - 基于注解的 api 认证
- sql - SQL Server - Aggregate by number of records returned for all groups
- node.js - vue express uploading multiple files to amazon s3
- python - When executing thread, the first execution fails in try statement
- flask - Flask & Swagger:request.files 为空