【问题标题】:Django Get Related with Multiple ModelsDjango 与多个模型相关联
【发布时间】:2014-12-14 14:31:47
【问题描述】:

您好,我是 Django 新手,不知道如何获取具有多个模型的相关对象。

我的代码:

#models.py
class Candidate(models.Model):
    user = models.OneToOneField(User, primary_key=True)
    birth = models.CharField(max_length=50)
    ...

class CandidatePhotos(models.Model):
    user = models.ForeignKey(User)
    photo = models.ImageField(upload_to='usergallery/%Y/%m/%d')

class Job(models.Model):
    candidate = models.ManyToManyField('Candidate', through='CandidateToJob')
    title = models.CharField(max_length=500)
    ...

class CandidateToJob(models.Model):
    job = models.ForeignKey(Job, related_name='applied_to')
    candidate = models.ForeignKey(Candidate, related_name='from_user')
    STATUS_CHOICES = (
       ('1', 'Not approved'),
       ('2', 'Approved'),
       ('3', 'Hired')
    )
    status = models.CharField(max_length=2, choices=STATUS_CHOICES)

在我的观点中

#views.py
class CandidateDetails(generic.DetailView):
    model = Candidate
    template_name = 'dashboard/candidate.html'

    def get_context_data(self, **kwargs):
        context = super(CandidateDetails, self).get_context_data(**kwargs)
        context['cand_photos'] = CandidatePhotos.objects.all()
        return context

在我的模板中

<h2>{{ candidate.user.first_name }} {{ candidate.user.last_name }}</h2>

{% for candidatephotos in cand_photos %}
    <img alt="" src="{{ candidatephotos.photo.url }}" >
{% endfor %}

这是我的网址仪表板/候选人/pk/。

会在模板中加载所有用户的照片,而不仅仅是我想要的特定用户。 我尝试使用 {{ Candidate.user.candidatephotos_set.photo.url }} 获取用户照片,但它不起作用。

我也尝试在 views.py 中将模型从“Candidate”更改为“CandidateToJob”(直通模型),但出现 404 错误,我不知道为什么。

那么,实现这一目标的最佳做法是什么?

【问题讨论】:

    标签: python django filtering models django-select-related


    【解决方案1】:

    根本不需要在视图中查询 CandidatePhotos。您的候选对象已经通过 User 建立了相关关系,因此您可以简单地遵循:

    {% for photo in object.user.candidatephotos_set.all %}
    

    【讨论】:

    • 嗨丹尼尔,谢谢,但这不起作用。也许是因为我忘了提到我是作为“公司用户”登录的。所以我登录的用户没有照片。在这个应用程序中,我有两种类型的用户:公司用户和候选用户。
    • 哦,抱歉,我使用的是:{% for Candidatephotos in object.user.candidatephotos_set.all %} 点赞。
    猜你喜欢
    • 2012-12-24
    • 2013-12-10
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 2014-09-17
    相关资源
    最近更新 更多