2016-09-01 1 views
0

рассматривать эти модели:Джанго условного максимума для каждого с внешним ключом

class Author(models.Model): 
    name = models.CharField(max_length=200) 

class Book(models.Model): 
    author = models.ForigenKey(Author) 
    name = models.CharField(max_length=200) 
    created_at = models.DateTimeField(auto_now_add=True) 
    active = models.BooleanField(default=True) 

Я хочу запросить всех авторов, с последними (например Max('created_at')) книгами из них в той же строке, но только тогда, когда книга active=True.
Мне нужно всего Связанный объект книги - не только максимальная дата.
Если такой книги нет - все активны = False или просто их нет - запрос должен выводить NULL, где необходимо, а не книгу.

Я пытался написать что-то вроде этого:

Author.objects.annotate(max_book_date=Max('book')) 

, который делает работу, но не хватает дополнительных полей книги, и я не знаю, как это работает в случае нулевой (т.е. нет книги), и условие active=True не существует ..

ответ

-1

Прежде всего, вы должны определить related_name параметров в поле автор Fk на модели книги:

author = models.ForeignKey(Author, related_name='libro') 

Затем S мог бы сделать что-то вроде:

Author.objects.filter(libro__active=True).annotate(max_book_date=Max('libro__created_at')).all() 
+0

Этого недостаточно для меня, мне нужен связанный объект книги (его название и подробная информация) не только о максимальной дате. BTW Я не думаю, что вызов .all() в конце помогает во что-то – user3599803