プリフェッチされたオブジェクトをフィルタリングする方法はありますか?プリフェッチされたオブジェクトのlatest()を取得する必要がありますが、クエリが変更されているため、latestを使用するとprefetch_relatedが機能しませんか?
ここの例は私が必要なことをしますが、もっと簡単な回避策があることを望んでいました...
Django 1.7の時点で、プリフェッチされたオブジェクトのフィルタリングが可能です。 this SO answer 、および the Djangoドキュメント 。
これは非常に単純な方法であり、これらのアプリとはほとんど比較できませんが、役立つことを願っています。
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
はい、それはこの方法で行うことができます:
authors=Author.objects.prefetch_related('book_set')
Authorモデルに存在する属性(名前)でフィルタリングする場合は、次のように記述して簡単にフィルタリングできます。
authors.filter(name='your_value')
ただし、Booksモデルにフィルターを適用する場合は、次のように記述する必要があります。
authors.filter(book__created__gt='your_date')
これにより、作成日(Bookモジュールのcreated属性)が日付よりも大きいすべての書籍がフィルタリングされます。