我有一个模特:
class MyModel(models.Model):
name = models.TextField()
age = models.IntegerField(max_length=3)
我的名字有:abraham lincoln
,john kennedy
,someone else
,doniyor
以及其他许多
我想用这个逻辑按名称对它们进行排序:
john kennedy
的所有人。其他人应该在他们之后展示。
我有点卡住,因为order_by()
采用fieldname而不是value作为参数。我怎么在django做这个?
答案 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
个对象;你只是带走了一些并把它们放在第一位。因此,这可以使用两个查询来表达。