V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
halicando
V2EX  ›  Python

如何根据字段值,给QuerySet的各条记录排序?

  •  
  •   halicando · 2013-08-04 17:26:55 +08:00 · 3356 次点击
    这是一个创建于 3918 天前的主题,其中的信息可能已经有所发展或是发生改变。
    例如:
    tasks_list=tasks.objects.filter(update_time='today')
    假设获得的tasks_list为 [task1,task2,...taskn]
    每条记录都包含state这个字段,且state值可以为 'finished', ‘todo’,'delay'
    那么如何根据state的值给tasks_list的各条记录排序?
    比如优先级为'todo','finished','delay'
    6 条回复    1970-01-01 08:00:00 +08:00
    cxe2v
        1
    cxe2v  
       2013-08-04 18:31:43 +08:00
    优先级这个没法设置吧,除了你给state赋予数字前缀,前缀就是优先级,或者来个state2字段给定优先级,当然灵活一点的是另建一张表,用state作为外键,另一个字段为优先级,这样就可以实现排序了
    felix021
        2
    felix021  
       2013-08-04 19:31:08 +08:00   ❤️ 1
    一句话:

    tasks_list.sort(key=lambda x: {'todo': 1, 'finished': 2, 'delay': 3}[x.state])
    z4none
        3
    z4none  
       2013-08-04 20:18:23 +08:00
    如果是 MySQL :
    select * from table where update_time='today' order by field (field, 'todo', 'finished', 'delay');
    z4none
        4
    z4none  
       2013-08-04 20:19:46 +08:00
    好吧 是 order by field (state, 'todo', 'finished', 'delay');
    hahastudio
        5
    hahastudio  
       2013-08-05 11:19:05 +08:00
    其实吧,你还是改SQL语句更划算= =我觉得= =
    raquelken
        6
    raquelken  
       2013-08-05 11:41:01 +08:00   ❤️ 1
    你可以这样做 tasks_list=tasks.objects.filter(update_time='today').extra(select={"ordering": "case when state='todo' then 1 when state='finished' then 2 when state='delay' then 3 else 4 end"}).order_by('ordering')

    但个人更建议你加字段
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4608 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 10:00 · PVG 18:00 · LAX 03:00 · JFK 06:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.