我不知道如何检索模板中与外键有关的数据。我将向您展示我现在所拥有的,这将为您清除一切。

公司简介:

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 Function,也可以只有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的列表,您可以使用job.jobfunction_set反向查询该关系:

{% for job in jobs %}
  {{ job.title }}
  {% for jf in job.jobfunction_set.all %}
    {{ jf.name }}
  {% endfor %}
{% endfor %}


请注意,在您看来,最好使用.prefetch_related(..) call [Django-doc]在一个数据库调用中获取所有相关的JobFunction,并在Django / Python级别执行“ join”过程:

def show_jobs(request):
    jobs = Job.objects.prefetch_related('jobfunction')
    context = {
       'jobs': jobs
    }
    return render(request, 'jobportal/jobs/browse-job.html', context)

关于python - 如何通过发送与模型相关的objects.all()获取外键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59821358/

10-13 02:50