有没有一种过滤预取对象的方法?我需要获取最新的()预取对象,但如果你使用最新的,prefetch_related不起作用,因为查询被更改了?
这里的例子做了我需要的但是我希望有一个更简单的解决方法......
答案 0 :(得分:14)
从Django 1.7开始,可以过滤预取对象。请参阅this SO answer和the Django documentation。
答案 1 :(得分:4)
这是一个非常简单的方法,很难与那些应用程序相媲美,但希望你会发现它很有用:
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
答案 2 :(得分:2)
是的,可以这样做:
authors=Author.objects.prefetch_related('book_set')
如果您想按作者模型中的属性(名称)进行过滤,您可以通过编写来过滤它:
authors.filter(name='your_value')
但是,如果要在Books模型上应用过滤器,则必须按以下方式编写:
authors.filter(book__created__gt='your_date')
这将过滤所有具有创建日期(Book模块中已创建的属性)的书籍,大于您的日期。