2013-02-10 66 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