2010-03-30 1 views
0

я две модели, связанные один ко многим: а сообщение и Комментарий:Джанго: упорядочение по обратному соответствующему имуществу поля

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 

Как я могу сделать то же самое с помощью Джанго ОРМ?

ответ

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

Thanks! Это работает без особых() тоже. Это необходимо? –

+0

Извините - 'distinct()' был утомленным слева от более ранней версии моего ответа. Вероятно, это работает. –