Django: Does prefetch_related() follow reverse relationship lookup?

后端 未结 2 678
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-04 23:07

I\'ve tried prefetch_related() in django 1.4 from trunk and can\'t make it to prefetch reverse lookup.

My simplified models (each book has many prices):



        
2条回答
  •  一个人的身影
    2020-12-05 00:07

    When you do not have defined a related_name for the relation, the reverse relation has _set appended. This is the case when accessing the reverse relation from an object (e.g. some_book.price_set.all()), but this also works on prefetch_related:

    books = Book.objects.prefetch_related('price_set')
    

    Note that this seems different from filter, which does accept the name of the other model without _set (e.g. Books.objects.filter(price__currency='EUR')).

    The above was tested with 1.11.8 (not on this specific code, but on my own, similar code).

    Alternatively, you can add a related_name, as shown by Jan Pöschko above.

提交回复
热议问题