使用Postgres作为db和Django 1.9在Django ORM的替代nullif
我有一些模型与字段'价格'。 '价格'空白=真。 在ListView上,我得到查询集。接下来,我想根据价格以价格= 0进行排序。
我怎样才能在SQL写: 'ORDER BY NULLIF(' 价格 '0)NULLS LAST'
如何把它写在Django的ORM?或者在rawsql上?
使用Postgres作为db和Django 1.9在Django ORM的替代nullif
我有一些模型与字段'价格'。 '价格'空白=真。 在ListView上,我得到查询集。接下来,我想根据价格以价格= 0进行排序。
我怎样才能在SQL写: 'ORDER BY NULLIF(' 价格 '0)NULLS LAST'
如何把它写在Django的ORM?或者在rawsql上?
您仍然可以ORDER BY PRICE NULLS LAST
如果在您选择的价格选择SELECT NULLIF('price', 0)
。这样你就可以得到你想要的订单,但数据以你想要的方式返回。在Django ORM,你会选择与annotate
如TableName.objects.annotate(price=NullIf('price', 0)
和通过NULLS LAST
订单,该订单由我会按照建议在这里Django: Adding "NULLS LAST" to query
否则,你也可以ORDER BY NULLIF('price', 0) DESC
但将重新排序其他数值的价格。如果你不需要它们,你也可以完全排除查询中的空价格。
好的。我找到了替代品。用django func写自己的NullIf。
from django.db.models import Func
class NullIf(Func):
template = 'NULLIF(%(expressions)s, 0)'
,并使用它的查询集:
queryset.annotate(new_price=NullIf('price')).order_by('new_price')
如何进口NULLIF?从哪个模块? – VoidArray
对不起,来自https://github.com/aykut/django-aggregates – quetzaluz