django简单但硬的order_by逻辑

时间:2013-11-25 18:02:22

标签: python django

我有一个模特:

class MyModel(models.Model):
  name = models.TextField()
  age  = models.IntegerField(max_length=3)

我的名字有:abraham lincolnjohn kennedysomeone elsedoniyor以及其他许多

我想用这个逻辑按名称对它们进行排序:

  • 首先显示名为john kennedy的所有人。

其他人应该在他们之后展示。

我有点卡住,因为order_by()采用fieldname而不是value作为参数。我怎么在django做这个?

2 个答案:

答案 0 :(得分:3)

您可以通过连接两个查询集来实现此目的,首先包含john kennedy的所有名称,第二个包含所有其他名称。

from django.db.models import Q
queryset1 = MyModel.objects.filter(name='john kennedy')
queryset2 = MyModel.objects.filter(~Q(name='john kennedy'))
queryset =  queryset1 | queryset2

答案 1 :(得分:2)

使用两个QuerySet个对象:

from itertools import chain

q1 = MyModel.objects.filter(name='john kennedy')
q2 = MyModel.objects.exclude(name='john kennedy')
results = list(chain(q1, q2))

你并不是真的按任何标准订购MyModel个对象;你只是带走了一些并把它们放在第一位。因此,这可以使用两个查询来表达。