【问题标题】:Django foreign-key many to one relationship displaying on template模板上显示的Django外键多对一关系
【发布时间】:2019-03-20 17:12:57
【问题描述】:

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

我的文件

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 家公司,但我无法在公司视图中获取它们,所以看起来循环是错误的,但我尝试了这么多循环但没有结果

【问题讨论】:

    标签: django foreign-keys


    【解决方案1】:

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

    【讨论】:

    • 谢谢,是的,我正在将品牌中的公司对象作为品牌传递,所以我尝试在工作中工作是我的错误,因为现在我明白了它们正在传递给 job_view.html :) 谢谢这么多!
    • 我之前没有看到这个 _set.all() 所以我将不得不了解更多关于这个(我是 django 的新手)但谢谢你的帮助:)
    • 没问题,如果回答正确,您可以接受。
    猜你喜欢
    • 2021-08-28
    • 1970-01-01
    • 2012-07-22
    • 2012-08-30
    • 2015-02-21
    • 2011-07-03
    • 2014-03-29
    • 1970-01-01
    相关资源
    最近更新 更多