我想将原始sql添加到Django模型对象中。 SQL中的查询我想在不编写整个内容的情况下执行。原始SQL是:
SELECT * FROM elements ORDER BY IF(elements.order=0, 99999, elements.order) ASC
基本上,按订单字段订购元素,但如果订单值为'0',则最后订购。
我尝试使用extra()或追加raw()而没有取得任何成功......我希望能够做到这样的事情:
Elements.objects.all().extra("ORDER BY IF(order=0, 99999, order)") ## or
Elements.objects.all().raw("ORDER BY IF(order=0, 99999, order)")
任何线索???
答案 0 :(得分:1)
不要那样做。
这样做。
results = list( Element.objects.filter(whatever).exclude( order__isnull=True ).order_by( order ) )
results.extend( Element.objects.filter(whatever).filter( order__isnull=False ) )
这将避免过于复杂的SQL。
试试这个。这真的很快。它可能比SQL快。
def by_order( item ):
return item.order if item.order is not None else 2**32
results = list( Element.objects.filter(whatever).all() )
results.sort( key=by_order )
答案 1 :(得分:0)