Django 获取多个模型的关联数据
你好,我刚开始学习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 %}