Django 获取多个模型的关联数据

0 投票
1 回答
728 浏览
提问于 2025-04-28 09:42

你好,我刚开始学习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 %}

这是我的网址:dashboard/candidate/pk/。

问题是,在模板里加载了所有用户的照片,而不是我想要的特定用户的照片。我尝试用{{ candidate.user.candidatephotos_set.photo.url }}来获取用户的照片,但没有成功。

我还尝试在views.py中把模型从“Candidate”改成“CandidateToJob”(中间模型),但出现了404错误,我不知道为什么。

那么,达到这个目的的最佳做法是什么呢?

暂无标签

1 个回答

1

其实在视图中根本不需要去查询CandidatePhotos。你的候选人对象已经通过User建立了相关的关系,所以你只需要沿着这个关系去查就可以了:

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

撰写回答