有没有过滤预取对象的方法?我需要获取预取对象的 latest(),但是如果您使用 latest,prefetch_related 不起作用,因为查询已更改?
这里的例子可以满足我的需要,但我希望有一个更简单的解决方法......
有没有过滤预取对象的方法?我需要获取预取对象的 latest(),但是如果您使用 latest,prefetch_related 不起作用,因为查询已更改?
这里的例子可以满足我的需要,但我希望有一个更简单的解决方法......
这是一个非常简单的方法,很难与那些应用程序相比,但希望你会发现它有用:
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')
这将过滤所有创建日期(图书模块中的已创建属性)大于您的日期的图书。