Фильтр prefetch_related в Django

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

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

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

Ответы на вопрос(3)

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

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
 27 сент. 2012 г., 18:38
Я извиняюсь - конечно, это должно быть prefetch_related (я отредактировал мой ответ). Использование этой дыры, установленной с all (), является предварительной выборкой, и итерирование не должно затрагивать базу данных.
 alan27 сент. 2012 г., 14:53
Я проверил это, и, похоже, он генерирует те же запросы, что и простой цикл ... Я не думаю, что вы можете использовать select_related для обратной связи
Решение Вопроса

возможна фильтрация предварительно выбранных объектов. Увидетьэтот так ответ, а такжедокументация по Django.

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

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

authors.filter(name='your_value')

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

authors.filter(book__created__gt='your_date')

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

Ваш ответ на вопрос