文章转载于这里
最近碰到一个需求,要对用户的学历进行排序,也就是按照[‘中专及以下’, ‘高中’, ‘大专’, ‘本科’, ‘硕士’, ‘博士’]的顺序进行排序,这就需要使用Django的ORM实现按指定字段的值进行排序。
- MySQL中的SQL语句的语法:
1 | select * from user_education where user_id = 1 ORDER BY FIELD(degree, '中专及以下', '高中', '大专', '本科', '硕士', '博士') DESC |
- python代码
1 | ordering = 'FIELD(`degree`, {})'.format(','.join([ "'{}'".format(i) for i in educations])) |
可通过数据库日志看到生成的sql语句:
1 | SELECT (FIELD(`degree`, '中专及以下','高中','大专','本科','硕士','博士')) AS `ordering` FROM `user_education` WHERE `user_education`.`user_id` = 31 ORDER BY `ordering` DESC LIMIT 1 |