我的数据库设置了一个案例列表,其中包含来自我们的票务系统的ID,一个位置,一个指定人员以及从该票证中获取的简短描述:
现在为了更好地排序,根据某些状态值,我们在查询后更改QuerySet。
current_active = Case.objects.filter(queue_num=0,status__lt=6)
for item in current_active:
if(item.location == 'NPH'):
item.assigned_tech = 'NPH'
elif(item.location == 'Bins'):
item.assigned_tech = 'Bins'
elif(item.status > '2' and item.status < '6'):
item.assigned_tech = 'Pending'
我想知道是否有任何方法可以对这个新修改的QuerySet进行排序。我们知道它打印正确,它只是归结为混乱的排序。
更新2
current_active = Case.objects.filter(queue_num=0,status__lt=6)
current_active_list = []
for item in current_active:
number = item.id
item.id = '%07d' % number
phone = item.myneuname.phonenumber
if(len(phone) > 7):
formattedPhone = phone[:-10]+' ('+phone[-10:-7]+') '+phone[-7:-4]+'-'+phone[-4:]
item.myneuname.phonenumber = formattedPhone
if(item.location == 'NPH'):
item.assigned_tech = 'NPH'
elif(item.location == 'Bins'):
item.assigned_tech = 'Bins'
elif(item.status > '2' and item.status < '6'):
item.assigned_tech = 'Pending'
current_active_list.append(item)
current_active_list.sort(key=lambda x: x.assigned_tech)
虽然这不是想法和Django风格,但这确实有效。如果您遇到同样的问题并找到更合理的方法来解决此问题,请随时回复。在不保存数据的情况下,制作Python列表似乎是唯一可行的方法。
答案 0 :(得分:2)
由于您正在评估查询集,然后在不保存的情况下修改某些元素,因此您需要避免任何返回数据库并重新评估它的内容。在您的情况下,简单地在Python中排序列表没有任何问题 - 例如:
current_active.sort(key=lambda x: x.assigned_tech)
按assigned_tech
字段排序。
答案 1 :(得分:1)
也许你在谈论django的ORM的order_by方法
答案 2 :(得分:0)
不确定如何根据新属性对相同的QuerySet进行排序,但如果要将每个item
附加到新列表中(在为每个项目分配assigned_tech
之后),您可以执行此操作像这样的东西:
import operator
new_list.sort(key=operator.attrgetter('assigned_tech'))
并改变排序顺序:
import operator
new_list.sort(key=operator.attrgetter('assigned_tech'), reverse=True)
但是如果你找到一种方法可以在不创建新列表的情况下做到这一点,那显然会更好,我很乐意看到它。