3

在查询集上使用“in”运算符时,第一次调用失败。

编辑4:

我已将我的问题简化为以下代码,任何人都应该很容易测试。

from django.db import models


class Category(models.Model):
    name = models.CharField(max_length=100)


class Project(models.Model):
    categories = models.ManyToManyField(Category, related_name='projects')    


category_list = Category.objects.prefetch_related('projects')


print category_list # [<Category: Category object>, <Category: Category object>]
print category_list[0] in category_list # False
print category_list[0] in category_list # True

如果我删除“prefetch_related”并改用“all”,那么问题就消失了,但这会使用更多的数据库调用。

如何第一次使用 prefetch_related 得到正确的结果?

4

1 回答 1

0

在此处的 Django 文档中,它显示了与您相同的代码,但.all()在 prefetch_related 前面有一个。

也许在没有那个 Django 的情况下可能对查询太懒了?我认为它可能会等到第一个切片 [0] 并将其解释为查询(LIMIT 0),但这并不能解释显示那里所有内容的打印语句。无论哪种方式,它看起来都像一个错误 - 无法想象这是“预期的行为”。

你能用.all()in 试试并报告输出吗?

于 2013-04-10T19:45:51.720 回答