У меня есть несколько элементов, которые могут быть одного или нескольких типов.
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
Что я делаю неправильно?