【发布时间】:2010-07-01 20:49:58
【问题描述】:
我有许多元素可以是一种或多种类型。
class Type(models.Model):
name = models.CharField(max_length=128, unique=True)
class Element(models.Model):
name = models.CharField(max_length=128, unique=True)
type = models.ManyToManyField('Type')
假设我有 3 种类型和 3 个元素:
In [3]: Type.objects.all()
Out[3]: [<Type: His Type>, <Type: My Type>, <Type: Your Type>]
In [4]: [(e,e.type.all()) for e in Element.objects.all()]
Out[4]:
[(<Element: First Element>, [<Type: My Type>]),
(<Element: Second Element>, [<Type: Your Type>]),
(<Element: Third Element>,
[<Type: My Type>, <Type: Your Type>, <Type: His Type>])]
我正在尝试使用仅属于“我的类型”类型的元素的查询集
我的想法是获取这种类型的元素并检查它们是否只是一种类型。
但由于某种原因,它认为“第三元素”只有一种类型
In [5]: my_type=Type.objects.get(name='My Type')
In [6]: my_type.element_set.annotate(num_types=Count('type')).filter(num_types__exact=1)
Out[6]: [<Element: First Element>, <Element: Third Element>]
In [7]: [(e,e.num_types) for e in my_type.element_set.annotate(num_types=Count('type'))]
Out[7]: [(<Element: First Element>, 1), (<Element: Third Element>, 1)]
当它是三种类型时
In [8]: Element.objects.get(name='Third Element').type.count()
Out[8]: 3
我做错了什么?
【问题讨论】: