2010-05-21 55 views
0

高效的查詢這是我的模型:與通用的關係

class Comment(models.Model): 

    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField(_('object ID')) 
    content_object = generic.GenericForeignKey() 
    user = models.ForeignKey(User) 
    comment = models.TextField(_('comment')) 


class Post(models.Model): 

    title = models.CharField(_('name'), max_length=80)   
    creator = models.ForeignKey(User, related_name="created_posts") 
    created = models.DateTimeField(_('created'), default=datetime.now) 
    body = models.TextField(_('body'), null=True, blank=True) 

現在在我的views.py我得到這個istruction一個帖子:

post = get_object_or_404(Post, id=id) 

在我views.py這一點,什麼是最有效的查詢(使用ORM)來獲取該帖子的所有評論?

回答

3

您應該在郵政上定義comments = generic.GenericRelation(Comment),以便您可以輕鬆地從郵寄到評論。一旦你這樣做,這是一個簡單的倒退關係:

comments = post.comments.all() 

請注意,這不是一個真正的效率問題。通過反向通用關係獲取所有相關項目最多隻會產生兩個查詢 - 一個用於獲取相關的ContentType,它將在第一次查找時自動緩存,並且一次獲取實際項目。

如果您已經問過如何儘可能有效地獲得多個帖子的所有評論,我會指出my blog一個很好的技術,但既然你沒有,我不會因爲那只是博客-whoring。