2014-10-19 100 views
0

嗨我是新的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 %} 

這裏是我的網址儀表板/候選/ PK /。

發生什麼是在模板中所有用戶的照片被加載,而不是隻有我想要的特定用戶。 我試圖使用{{candidate.user.candidatephotos_set.photo.url}}獲取用戶照片,但它不起作用。

我也嘗試將views.py中的模型從「Candidate」更改爲「CandidateToJob」(直通模型),但出現404錯誤,我不知道爲什麼。

那麼,實現這一目標的最佳做法是什麼?

回答

1

根本不需要在視圖中查詢CandidatePhotos。您的候選對象已通過用戶有相關的關係,所以你可以簡單地遵循:

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

嗨丹尼爾,謝謝,但這是行不通的。也許是因爲我忘記提及我已經登錄爲「公司用戶」。所以我登錄的用戶沒有照片。在這個應用程序中,我有兩種類型的用戶:公司用戶和候選用戶。 – 2014-10-19 15:21:25

+0

對不起,我使用了{%for object.user.candidatephotos_set.all%}中的候選照片。 – 2014-10-19 15:27:15