我试图在桌面上订购联系人,而我遇到了一些问题,我在这个SO问题中找到了一个很好的解决方案,也许这对此来说是过度杀戮,但是我试图在restapi
上执行此操作,所以我只会影响我的休息视图,好吧这是我的解决方案:
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'])
我这样做是因为我不想改变我的数据库字段,就像我说我只想影响我的休息视图一样,问题是,我做这个过滤器错了所有这一切默认设置是错误的吗?
模型字段:
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"))
答案 0 :(得分:2)
你所关联的问题是从2012年开始。自那时以来发生了很多变化,例如包含..... CASE/WHEN in django。
Case()表达式与if中的if ... elif ... else语句类似 蟒蛇。计算所提供的When()对象中的每个条件 命令,直到一个人评估一个真实的价值。结果表达式 从匹配的When()对象返回。
整个想法是你不需要像过去人们有时必须编写复杂的查询一样。
标准做法是使用CASE / WHEN创建注释,然后按顺序在注释中使用