使用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