小编Tha*_*bon的帖子

Django 案例,当 else 在过滤器中时

我需要与此 SQL 类似的代码:

SELECT * FROM tab WHERE a = CASE WHEN x IS NULL THEN b ELSE c END

我的尝试,但没有成功:

model.objects.filter(a=Q(Case(When(x__isnull=True, then='b'), default='c')))

当我尝试运行时,出现此错误:

Traceback (most recent call last):
  File "<input>", line 2, in <module>
  File "C:\projetos\xxx\venv\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\projetos\xxx\venv\lib\site-packages\django\db\models\query.py", line 904, in filter
    return self._filter_or_exclude(False, *args, **kwargs)
  File "C:\projetos\xxx\venv\lib\site-packages\django\db\models\query.py", line 923, in _filter_or_exclude
    clone.query.add_q(Q(*args, **kwargs))
  File "C:\projetos\xxx\venv\lib\site-packages\django\db\models\sql\query.py", line 1340, in add_q
    clause, _ = self._add_q(q_object, self.used_aliases)
  File "C:\projetos\xxx\venv\lib\site-packages\django\db\models\sql\query.py", line 1371, in …
Run Code Online (Sandbox Code Playgroud)

python django orm case filter

3
推荐指数
1
解决办法
4014
查看次数

标签 统计

case ×1

django ×1

filter ×1

orm ×1

python ×1