在尝试在Many2Many关系中使用.values()时,我遇到了非常奇怪的行为。
(Pdb) self.get_queryset().values(u'id')
[{u'id': 16815}, {u'id': 16813}, {u'id': 16816}, {u'id': 16814}]
但是当我在多对多关系中添加特定值时,某些id
消失了:
(Pdb) self.get_queryset().values(u'id',u'pizza__ingredient__allergenes__id')
[
{u'pizza__ingredient__allergenes__id': 166, u'id': 16815},
{u'pizza__ingredient__allergenes__id': 37, u'id': 16815},
{u'pizza__ingredient__allergenes__id': 166, u'id': 16813},
{u'pizza__ingredient__allergenes__id': 37, u'id': 16813}
]
docs州:
因为ManyToManyField属性和反向关系可以有多个相关的行,包括这些行可能会对结果集的大小产生乘数效应。如果在values()查询中包含多个此类字段,这将特别明显,在这种情况下,将返回所有可能的组合。
因此我期待看到这种行为:
(Pdb)self.get_queryset().values(u'id',u'pizza__ingredient__allergenes__id')
[
{u'pizza__ingredient__allergenes__id': 166, u'id': 16815},
{u'pizza__ingredient__allergenes__id': 37, u'id': 16815},
{u'pizza__ingredient__allergenes__id': 166, u'id': 16813},
{u'pizza__ingredient__allergenes__id': 37, u'id': 16813},
{u'pizza__ingredient__allergenes__id': 166, u'id': 16814},
{u'pizza__ingredient__allergenes__id': 37, u'id': 16814},
{u'pizza__ingredient__allergenes__id': 166, u'id': 16816},
{u'pizza__ingredient__allergenes__id': 37, u'id': 16816}
]
这里发生了什么?值调用是否会影响我的查询集,还是其他工作正在进行?
我检查了与我的问题相关的all the values for many to many,但他们没有看到我遇到的奇怪行为
编辑:当我输入另一个值来查询m2m以获得良好的衡量标准时,我突然将我丢失的物品丢回。我真的很困惑。[
{u'pizza__ingredient__allergenes__name': u'Curry', u'pizza__ingredient__allergenes__id': 166, u'id': 16813},
{u'pizza__ingredient__allergenes__name': u'Tomatoe', u'pizza__ingredient__allergenes__id': 37, u'id': 16813},
{u'pizza__ingredient__allergenes__name': u'Curry', u'pizza__ingredient__allergenes__id': 166, u'id': 16814},
{u'pizza__ingredient__allergenes__name': u'Tomatoe', u'pizza__ingredient__allergenes__id': 37, u'id': 16814},
{u'pizza__ingredient__allergenes__name': u'Curry', u'pizza__ingredient__allergenes__id': 166, u'id': 16816},
{u'pizza__ingredient__allergenes__name': u'Tomatoe', u'pizza__ingredient__allergenes__id': 37, u'id': 16816},
{u'pizza__ingredient__allergenes__name': u'Curry', u'pizza__ingredient__allergenes__id': 166, u'id': 16815},
{u'pizza__ingredient__allergenes__name': u'Tomatoe', u'pizza__ingredient__allergenes__id': 37, u'id': 16815}
]