Django-为抽象模型的不同sbubclass合并QuerySet

时间:2019-04-12 11:19:29

标签: django

例如,我有一个抽象模型X,并且ABC模型是从X继承的(其中一些字段已重新定义) )。

我想创建一个包含所有ABC的QuerySet。由于X是抽象的,并且没有自己的QuerySet(因为它不是通用X的表),因此我尝试执行以下操作:

# annotating with a `type` integer denoting the actual type
# some_field is present in A and B, but absent in C, so we add a placeholder to allow `union`
(A.objects.all().annotate(type=models.Value(1, models.IntegerField()))
            .union(B.objects.all().annotate(type=models.Value(2, models.IntegerField())))
            .union(C.objects.all().annotate(some_field=models.Value(None, models.IntegerField()),
                                            type=models.Value(3, models.IntegerField()))
                   )
            )

但是,这不起作用,因为对于联合的每个部分,由于形成的SQL查询中的列顺序不同(由于重新定义的字段)。有没有办法明确指定顺序?

P.S。这里我不能使用values()values_list(),因为我必须将模型对象(而不是字典/元组)保留在QuerySet中。

0 个答案:

没有答案