2010-03-30 64 views
0

我有兩個模型有關的一個一對多:一個郵政評論Django的:由落後的相關字段屬性排序

class Post(models.Model): 
    title = models.CharField(max_length=200); 
    content = models.TextField(); 

class Comment(models.Model): 
    post = models.ForeignKey('Post'); 
    body = models.TextField(); 
    date_added = models.DateTimeField(); 

我想要得到的職位列表,按排序最新評論的日期。如果我會寫一個自定義的SQL查詢它應該是這樣的:

SELECT 
    `posts`.`*`, 
    MAX(`comments`.`date_added`) AS `date_of_lat_comment` 
FROM 
    `posts`, `comments` 
WHERE 
    `posts`.`id` = `comments`.`post_id` 
GROUP BY 
    `posts`.`id` 
ORDER BY `date_of_lat_comment` DESC 

如何使用Django ORM我做同樣的事情?

回答

2
from django.db.models import Max 

Post.objects.distinct() \ 
      .annotate(date_of_last_comment=Max('comment__date_added')) \ 
      .order_by('-date_of_last_comment') 
+0

謝謝!這個工作沒有distinct()。有必要嗎? – 2010-03-30 09:01:03

+0

對不起 - 'distinct()'從我早期版本的答案中留下。它可能沒有工作。 – 2010-03-30 09:04:20