我正在尝试将两个查询集与共享字段进行并集。
这有效:
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)
| 归档时间: |
|
| 查看次数: |
406 次 |
| 最近记录: |