在Django中过滤prefetch_related

ala*_*lan 19 django django-1.4

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

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

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

Web*_*ast 16

从Django 1.7开始,可以过滤预取对象.请参阅此SO答案Django文档.


jas*_*isz 5

这是一种非常简单的方法,几乎​​无法与那些应用程序相比,但是希望您会发现它有用:

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
Run Code Online (Sandbox Code Playgroud)

  • 抱歉-当然应该是prefetch_related(我编辑了答案)。与all()一起使用此漏洞集是预取的,并且对其进行迭代不应影响数据库。 (2认同)