首页 > 解决方案 > 模板上显示的Django外键多对一关系

问题描述

我正在尝试显示与公司(多对一)相关的工作机会,但我无法做到。我尝试了很多循环,但我什至没有得到查询集,所以我必须做错但无法解决我做错了什么。

我的文件

模型.py

class Company(models.Model):
    # field person with relation many to one (many persons to 1 company)
    team = models.ManyToManyField('Person')
    name = models.CharField(max_length=100, blank=False)
    ...

class Job(models.Model):
    name = models.CharField(max_length=40, blank=False)
    level = models.CharField(max_length=10, blank=False, choices=LEVELS)
    company = models.ForeignKey('Company', on_delete=models.CASCADE, default=None, blank=False)
    emp_type = models.ManyToManyField('Emp_type', blank=False)
    ...

    def __str__(self):
        return self.name

comp_list.html

            <div class="company-logo-container">
    <img class="company-logo" src="{{ brand.logo.url }}">
</div>
    <ul class="list-group">
       <li class="list-group-item">
          <a class="nav-link" href="#team">Team</a>
       </li>
       <li class="list-group-item">
          <a class="nav-link" href="#social_media">Social Media</a>
       </li>
       <li class="list-group-item">
          <a class="nav-link" href="#offers">Job Offers</a>
       </li>
       {% for job in jobs %}
       {% for company in job.company.all %}

        {{ job.name }}

        {% endfor %}
        {% endfor %}

    </ul>

视图.py

def brands(request, slug):
    brand = get_object_or_404(Company, slug=slug)
    return render(request, 'company/comp_view.html', {'brand': brand})

def jobs(request, slug):
    job = get_object_or_404(Job, slug=slug)
    return render(request, 'company/job_view.html', {'job': job})

我创建了一些工作机会并将它们分配给 1 家公司,但我无法在公司视图中获取它们,所以看起来循环是错误的,但我尝试了这么多循环但没有结果

标签: djangoforeign-keys

解决方案


考虑到您将公司对象从brands视图传递到comp_view.html模板brand

{% for job in brand.job_set.all %}
    {{ job.name }}
{% endfor %}

只需为一家公司找到工作,然后遍历它们。

如果您愿意,您还可以查看工作:

def brands(request, slug):
    brand = get_object_or_404(Company, slug=slug)
    jobs = brand.job_set.all()
    return render(request, 'company/comp_view.html', {'brand': brand, 'jobs': jobs})

接着:

{% for job in jobs %}
    {{ job.name }}
{% endfor %}

推荐阅读