两个查询集的 Django 联合不适用于带注释的值

bdo*_*leu 5 django

我正在尝试将两个查询集与共享字段进行并集。

有效

fields = ['id', 'date_trans', 'total', 'allocated', 'balance']
qs1 = Order.objects.values_list(*fields)
qs2 = OnAccount.objects.values_list(*fields)
return qs1.union(qs2)
Run Code Online (Sandbox Code Playgroud)

Order模型有一个CharField调用num_invoice,我想将其作为一个字段包含在联合中。该字段在模型中不存在OnAccount,因此为了将其包含在values_list()我正在使用注释中。

注释工作正常,但联合会导致错误:

django.db.utils.ProgrammingError: UNION types character varying and date cannot be matched
Run Code Online (Sandbox Code Playgroud)

这是我的注释和不起作用的联合:

from django.db.models import CharField, Values as V
from django.db.models.functions import Concat

fields = ['id', 'num_invoice', 'date_trans', 'total', 'allocated', 'balance']
qs1 = Order.objects.values_list(*fields)
qs2 = (
    OnAccount.objects
    .annotate(num_invoice=Concat(V('OA-'), 'id', output_field=CharField()))
    .values_list(*fields)
)
return qs1.union(qs2)
Run Code Online (Sandbox Code Playgroud)

更新信息

>>> qs1.model._meta.get_field('num_invoice')
<django.db.models.fields.CharField: num_invoice>

>>> qs1.model._meta.get_field('date_trans')
<django.db.models.fields.DateField: date_trans>

>>> qs2.model._meta.get_field('date_trans')
<django.db.models.fields.DateField: date_trans>
Run Code Online (Sandbox Code Playgroud)