2013-02-10 64 views
0

我已經完成了一個概念證明django項目,現在想要重新設計模型以使其更健壯。django:有多個外鍵查詢的模型

的基本模型被稱爲PhraseRequest

class PhraseRequest(models.Model): 
    user = models.ForeignKey(User) 
    timestamp = models.DateTimeField() 
    phrase = models.TextField() 

現在併發症進來一個PhraseRequest有一堆關聯模型,PhraseRequestVotePhrase(應答),PhraseRequestComment &的C。

現在,當我列出排名前十的短語請求時,我的模板有一個for-each循環,它提供了十個PhraseRequest對象。然後用請求填充HTML,並將所有相關數據填充到HTML中。

到目前爲止,我已經加入到每PhraseRequest的字典來實現這一目標:

for r in phrase_requests: 
    r.votes = PhraseRequestVote.objects.filter(request=r) 
    r.n_votes = sum([v.weight for v in r.votes]) 
    r.comments = PhraseRequestComment.objects.filter(request=r) 
    #and so on 

直觀地看,這似乎並不正確 - 必須有一個‘正確’的方式來做到這一點。我是否需要重新設計模型?查詢?

回答

1

您可以在您的模型中製作功能並在您的視圖中對其進行排序。像這樣

models.py

class model_name(models.Model) 

    ........ 

    def votes(self): 
     return Vote_Name.objects.filter(phrase_id=self).count() 
+0

啊,是的!我甚至可以把這個財產權利?通過重寫'getattr' – jsj 2013-02-10 07:54:40

+0

是,祝你好運,並有你的實驗 – catherine 2013-02-10 08:00:13