Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用SQL进行排序';s CASE WHEN/THEN语法django_Python_Django_Django Rest Framework - Fatal编程技术网

Python 使用SQL进行排序';s CASE WHEN/THEN语法django

Python 使用SQL进行排序';s CASE WHEN/THEN语法django,python,django,django-rest-framework,Python,Django,Django Rest Framework,我试图在表中对联系人进行排序,我遇到了一些问题,我在这个问题上找到了一个很好的解决方案,也许这是一个过度的杀戮,但我试图在restapi上进行此操作,所以我仅用此影响我的rest视图,好的,这是我的排序解决方案: filter_date = self.request.query_params.get('filter_date', None) case_sql = '(case when status="Client" ' \ 'then 1

我试图在表中对联系人进行排序,我遇到了一些问题,我在这个问题上找到了一个很好的解决方案,也许这是一个过度的杀戮,但我试图在
restapi
上进行此操作,所以我仅用此影响我的rest视图,好的,这是我的排序解决方案:

filter_date = self.request.query_params.get('filter_date', None)

        case_sql = '(case when status="Client" ' \
                   'then 1 when status="Contacted" ' \
                   'then 2 when status="Qualified" ' \
                   'then 3 when status="Virgin" then 4 end)'

        if filter_date is not None:
            queryset = queryset.filter(next_action_date=filter_date).extra(select={'status': case_sql},
                                                                           order_by=['status'])
我这样做是因为我不想更改我的db字段,就像我说的,我只想影响我的rest视图,所以问题是,我是否做了这个过滤器错误所有这些默认设置都是错误的

模型字段:

status = models.CharField(max_length=10, choices=LeadContactConstants.STATUSES, default=LeadContactConstants.STATUS_PRISTINE)
以及该字段的选项:

class LeadContactConstants(object):
    STATUS_PRISTINE = "PRISTINE"
    STATUS_CONTACTED = "CONTACTED"
    STATUS_QUALIFIED = "QUALIFIED"
    STATUS_CLIENT = "CLIENT"

    STATUSES = ((STATUS_PRISTINE, "Virgin"),
                (STATUS_CONTACTED, "Contacted"),
                (STATUS_QUALIFIED, "Qualified"),
                (STATUS_CLIENT, "Client"))

您链接到的问题来自2012年。从那时起,情况发生了很大的变化,例如加入了

Case()表达式类似于if。。。埃利夫。。。else语句 python中提供的When()对象中的每个条件都在中求值 顺序,直到计算出真实值为止。结果表达式 从匹配的When()对象返回

整个想法是,您不需要像过去人们有时不得不写的那样编写复杂的查询


标准做法是创建一个带有CASE/WHEN的注释,然后按照您链接到的问题是从2012年开始的顺序在注释中使用该注释。从那时起,情况发生了很大的变化,例如加入了

Case()表达式类似于if。。。埃利夫。。。else语句 python中提供的When()对象中的每个条件都在中求值 顺序,直到计算出真实值为止。结果表达式 从匹配的When()对象返回

整个想法是,您不需要像过去人们有时不得不写的那样编写复杂的查询


标准做法是创建一个带有CASE/WHEN的注释,然后在注释中按我看到的顺序使用它,因此创建注释将帮助我对其进行排序,我看到它在
django=1.8
中工作,如果我没有记错的话,这就是我正在使用的版本,这就是引入此功能的版本。我得到了注释的
ValueError
,它说它与我的模型字段冲突,有没有办法克服这个问题?肯定有,但这是一个完全不同的问题。请用您的模型和您得到的确切错误以及您尝试的django查询发布一个新问题。好的,这是我的新问题,我看到了我的自定义注释,因此创建注释将帮助我排序,我看到这在
django=1.8
中工作,如果我记得正确,这是我正在使用的版本,这就是引入此功能的版本。我得到了注释的
ValueError
,它说它与我的模型字段冲突,有没有办法克服这个问题?肯定有,但这是一个完全不同的问题。请用你的模型和你得到的确切错误以及你尝试的django查询发布一个新问题。好的,这是我的新问题,带有我的自定义注释