29

有没有过滤预取对象的方法?我需要获取预取对象的 latest(),但是如果您使用 latest,prefetch_related 不起作用,因为查询已更改?

这里的例子可以满足我的需要,但我希望有一个更简单的解决方法......

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

4

3 回答 3

24

从 Django 1.7 开始,可以过滤预取的对象。请参阅这个 SO 答案Django 文档

于 2015-01-20T11:06:49.673 回答
7

这是一个非常简单的方法,很难与那些应用程序相比,但希望你会发现它有用:

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
于 2012-09-26T20:00:35.940 回答
1

是的,可以通过这种方式完成:

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

如果您想通过 Author 模型中存在的属性(名称)进行过滤,您可以简单地通过编写来过滤它:

authors.filter(name='your_value')

但是如果你想在 Books 模型上应用过滤器,你必须这样写:

authors.filter(book__created__gt='your_date')

这将过滤所有创建日期(图书模块中的已创建属性)大于您的日期的图书。

于 2015-12-30T10:53:30.897 回答