当我从同一模型类MyModel
中检索对象的两个子集,并为每个子集添加不同的注释时(第一个添加{something
,第二个添加other
-这两个属性都没有是MyModel
中的一个字段,我得到奇怪的结果:
mgr = MyModel.objects
q1 = mgr.filter(pk=1).annotate(something= \
djdm.Value("is", output_field=djdm.CharField(null=True)))
q2 = mgr.filter(pk=2).annotate(other= \
djdm.Value(123, output_field=djdm.CharField(null=True)))
queryset = q1 | q2
print([(obj.pk,
getattr(obj, 'something', 'NO_something'),
getattr(obj, 'other', 'NO_other'))
for obj in queryset.all()])
使用SQlite上的Django 2.1,我得到的是:
[(1,'is','NO_other'),(2,'is','NO_other')]
问题:
None
而不是第一个'NOother'
。有没有办法让Django在OR中将other
中的q2
列添加到q1
中?'NO_other'
令人失望。我的123
注释去了哪里?'is'
完全荒谬。从something
到q1
的{{1}}可能会蔓延到q2
?这是没有意义的。那里发生了什么事? 我肯定会在这里犯一些错误(至少希望如此),但是哪个?