在Django中过滤prefetch_related

时间:2012-06-06 13:35:33

标签: django django-1.4

有没有一种过滤预取对象的方法?我需要获取最新的()预取对象,但如果你使用最新的,prefetch_related不起作用,因为查询被更改了?

这里的例子做了我需要的但是我希望有一个更简单的解决方法......

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

3 个答案:

答案 0 :(得分:14)

从Django 1.7开始,可以过滤预取对象。请参阅this SO answerthe 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模块中已创建的属性)的书籍,大于您的日期。