Django 排除';额外';来自queryset的字段
我有一个带有一个“额外”字段的查询集:Django 排除';额外';来自queryset的字段,django,django-models,Django,Django Models,我有一个带有一个“额外”字段的查询集: query_set = data_model.extra(select={'status': '''CASE <sql-query here>''') 我得到一个错误: Cannot resolve keyword 'status' into field. Choices are: <list of field from my models here> 上面的代码不会生成任何异常。因此,如何过滤或排除使用“extra”方法获
query_set = data_model.extra(select={'status': '''CASE <sql-query here>''')
我得到一个错误:
Cannot resolve keyword 'status' into field. Choices are: <list of field from my models
here>
上面的代码不会生成任何异常。因此,如何过滤或排除使用“extra”方法获得的字段
这是一个非常简单的模型(但有很多字段),但这是我使用的“额外”方法:
qs = qs.extra(select={
'void_status': '''CASE
WHEN "orderitem".voided_date IS NULL
THEN {normal}
WHEN "orderitem".voided_date >= %s AND
"orderitem".voided_date < %s AND
"orderitem".created_date >= %s AND
"orderitem".created_date < %s
THEN {fully_voided}
WHEN "orderitem".voided_date >= %s AND
"orderitem".voided_date < %s
THEN {voided}
ELSE {normal}
END'''.format(normal=1,
voided=2,
fully_voided=3)
}, select_params=[start, end] * 3)
qs=qs.extra(选择={
“无效状态”:“案例”
当“orderitem.”作废日期为空时
然后{normal}
当“orderitem”。作废日期>=%s和
“orderitem”。作废的\u日期<%s和
“orderitem”。创建日期>=%s和
“订单项”。创建日期<%s
然后{完全无效}
当“orderitem”。作废日期>=%s和
“orderitem”。作废的\u日期<%s
然后{作废}
ELSE{normal}
结束“”。格式(正常=1,
无效=2,
完全无效=3)
},选择_参数=[start,end]*3)
你能发布你的模型和额外的sql吗?你是说我需要使用qs.extra(其中=[…],参数=[…])之类的东西吗?我已经尝试了这个方法,并得到了DB错误(字段不存在,但这是另一个问题)。非常感谢。
values = query_set.values_list('status')
qs = qs.extra(select={
'void_status': '''CASE
WHEN "orderitem".voided_date IS NULL
THEN {normal}
WHEN "orderitem".voided_date >= %s AND
"orderitem".voided_date < %s AND
"orderitem".created_date >= %s AND
"orderitem".created_date < %s
THEN {fully_voided}
WHEN "orderitem".voided_date >= %s AND
"orderitem".voided_date < %s
THEN {voided}
ELSE {normal}
END'''.format(normal=1,
voided=2,
fully_voided=3)
}, select_params=[start, end] * 3)