servers = Server.objects.filter(Q(paichus__paichus__icontains=owner_department),ispass__in=['4','5','6']).order_by('-modify_time') 以上代码,如何将ispass = '5'排序排在前面,,ispass = '6'排在次前面?
时间: 2024-01-03 21:03:36 浏览: 25
Django admin 实现search_fields精确查询实例
要将 `ispass = '5'` 排在前面,`ispass = '6'` 排在次前面,可以使用 Django 的 `Case` 表达式和 `When` 条件来实现。以下是修改后的代码示例:
```python
from django.db.models import Case, When, Value, IntegerField
servers = Server.objects.filter(Q(paichus__paichus__icontains=owner_department), ispass__in=['4', '5', '6']).order_by(
Case(
When(ispass='5', then=Value(0)),
When(ispass='6', then=Value(1)),
default=Value(2),
output_field=IntegerField()
),
'-modify_time'
)
```
在这个示例中,我们使用了 `Case` 表达式和多个 `When` 条件来指定排序优先级。当 `ispass` 等于 `'5'` 时,我们给该结果分配一个值为 0 的排序优先级,当 `ispass` 等于 `'6'` 时,我们给该结果分配一个值为 1 的排序优先级,其他情况下默认为 2。然后按照这个排序优先级以及 `-modify_time` 进行排序。
这样,`ispass = '5'` 的结果将排在最前面,其次是 `ispass = '6'` 的结果,剩下的结果按照 `-modify_time` 进行排序。
阅读全文