Django外键在模板上显示多对一关系

时间:2019-03-20 17:12:58

标签: django foreign-keys

我正在尝试显示与Company(多对一)有关的工作机会,但我无法做到。我已经尝试了很多循环,但是我什至没有获取queryset,所以我必须做错了,但是无法解决我做错的事情。

我的文件

models.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>

views.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家公司,但是我无法在公司视图中获取它们,因此看起来像循环是错误的,但是我尝试了很多次循环却没有结果

1 个答案:

答案 0 :(得分:3)

考虑到您要将公司对象从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 %}