Django 1.7.1,MySQL 5.6,Python 2.7.8
我有一个包含几千个成员对象的类Test
。它从具体的基类继承了时间,日期和id。 Test类包含与非可空列对应的属性。我们称之为color
。我跑的时候
Test.objects.filter(date=date).values('color').distinct()
它尽职尽责地返回一个看起来像
的单例序列表[{'color': None}, {'color': u'yellow'}, {'color': u'clear'}, ... ]
实际上,
>>> Test.objects.filter(date=date).count()
1650
>>> Test.objects.filter(date=date, color=None).count()
1650
>>> Test.objects.filter(date=date, color='clear').count()
4
这些返回值似乎与来自给定日期的1650个总对象相矛盾,所有这些对象都具有颜色None
,但其中4个具有颜色' clear'。其他颜色也会返回良好的int值,并且对DB的检查确认它们是正确的,并且该列中根本没有None
。
当程序迭代值并获得KeyError时,None
的存在会在其他地方引起麻烦。
values()
是否以某种方式包含None
,即使它既不是任何对象的真正价值,也不可能?
None
?
答案 0 :(得分:1)
如果日期是外键(根据评论),那可能是您的问题的根源。
我希望底层查询首先在此关系的“一”侧进行过滤,其中一些记录在“多”方面是不匹配的。那些不匹配的记录是初始结果集的一部分,因此对于某些行的颜色,您将获得“无”。
这有点像kludge,但你可以用这种方式排除那些不匹配的记录:
Test.objects.filter(date=date).exclude(color=None).values('color').distinct()
或许是时候再看看你的模特设计了。很难从这里知道。