Django:测试对象是否在集中的最简单方法是什么

时间:2012-07-27 19:16:19

标签: django

在试图找到文档中的答案无济于事之后,只是一个困扰我的非关键问题。

class Book(models.Model)
    authors = ManyToManyField(Author)

homer = Author.objects.get(pk=1)
iliad = Book.objects.get(pk=2)

iliad.authors.filter(pk=homer.pk).exists()
Book.objects.filter(name='Iliad', authors__in=homer).exists()

我相信最后两个断言将测试荷马是否是伊利亚特的作者。但我有点不喜欢(pk = homer.pk)部分,我想知道是否有任何构造允许我测试一个对象(假设我们已经从“get”中获得它)存在于查询集中?

(homer in iliad.authors)

虽然上面的表达式也可以起作用,并且可以说是更加pythonic,但它可能会从DB中找回太多不必要的作者。

2 个答案:

答案 0 :(得分:0)

在这种特殊情况下,homer in iliad.authors只会比exists版本略慢。大多数书籍都有一两位作者,因此从DB中获取所有书籍应该不是问题。

我认为没有办法在Django中更快地执行此操作而不使用过滤器,对不起。

答案 1 :(得分:0)

Django's queryset code在使用in运算符时实现了一些优化。

为了获得更好的洞察力,我会尝试在查询集上使用in与其他示例相比,对于大型和小型数据集。