Django QuerySet或具有不同注释

时间:2018-09-05 09:04:46

标签: django django-models

当我从同一模型类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')]

问题:

  1. 我希望使用None而不是第一个'NOother'。有没有办法让Django在OR中将other中的q2列添加到q1中?
  2. 第二个'NO_other'令人失望。我的123注释去了哪里?
  3. 第二个'is'完全荒谬。从somethingq1的{​​{1}}可能会蔓延到q2?这是没有意义的。那里发生了什么事?

我肯定会在这里犯一些错误(至少希望如此),但是哪个?

0 个答案:

没有答案