从查询集中排除“额外”字段

时间:2013-12-02 08:12:14

标签: django django-models

我有一个带有一个'额外'字段的QuerySet:

query_set = data_model.extra(select={'status': '''CASE  <sql-query here>''')

但是当我尝试排除或过滤此字段时:

query_set = query_set.exclude(status=1)
query_set = query_set.filter(status=2)

我收到错误:

Cannot resolve keyword 'status' into field. Choices are: <list of field from my models 
here>

我知道'extra'意味着使用纯SQL(没有ORM),但'exclude'或'filter'方法是'ORM'方法。但在这种情况下,为什么其他方法,例如'values_list',工作正常:

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)

0 个答案:

没有答案