from project.models import Employees
sorting_field = 'name'
emps = Employees.objects.raw('SELECT * FROM employees where deleted=0 order by %s desc limit 5', [sorting_field])
这不会按降序获得记录的顺序。
答案 0 :(得分:1)
通过order by %s
参数向param
提供.raw()
的值不起作用,因为所有参数都被数据库后端转义。因此,您最终会得到order by 'name'
(请注意引号)之类的查询,但这些查询无法正常工作。
或者,您可以使用字符串格式(which the Django docs strongly and rightely so advise against),但如果您不使用它来将用户生成的输入放入查询中,那么您应该没问题:
if condition:
sort_field = 'name'
else:
sort_field = 'id'
query = 'SELECT * FROM employees WHERE deleted = 0 ORDER BY {} DESC LIMIT 5'
params = {…} # other parameters that need regular escaping
emps = Employees.objects.raw(query.format(sort_field), params)
答案 1 :(得分:0)
order_by
只是QuerySet
对象的方法,而不是RawQuerySet
。这是在django orm中使用Raw obeject的限制之一
答案 2 :(得分:-1)
为什么使用原始查询来完成如此简单的任务? 试试这个:
Employees.objects.filter(deleted=0).order_by('-name')[:5]