Подтвердить что ты не робот

Фильтровать по prefetch_related в Django

Есть ли способ фильтрации предварительно загруженных объектов? Мне нужно получить последние() из предварительно загруженных объектов, но prefetch_related не работает, если вы используете последнее, потому что запрос изменен?

Пример здесь делает то, что мне нужно, но я надеялся, что там будет более простое обходное решение...

https://github.com/ionelmc/django-prefetch#example

4b9b3361

Ответ 2

Это очень простой метод, который вряд ли сопоставим с этим приложением, но надеюсь, что вы сочтете это полезным:

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

    def latest_book(self):
        return max(self.book_set.all(), key=lambda book: book.created)

authors = Author.objects.prefetch_related('book_set')
authors[0].latest_book() #  what you wanted

Ответ 3

Да, это можно сделать следующим образом:

authors=Author.objects.prefetch_related('book_set')

Если вы хотите отфильтровать атрибут (имя), присутствующий в модели Author, вы можете просто отфильтровать его, написав:

authors.filter(name='your_value')

Но если вы хотите применить фильтр в модели "Книги", вы должны написать следующий способ:

authors.filter(book__created__gt='your_date')

Это будет фильтровать все книги, которые создали дату создания (созданный атрибут в модуле книги) больше, чем ваша дата.