我有以下型号:
class Entry(models.Model):
name = models.Charfield(max_length=255)
client = models.Charfield(max_length=255)
Run Code Online (Sandbox Code Playgroud)
client是客户端的名称,可能有像facebook,google等等的值.
是否可以对查询集进行排序,以便结果交替出现client?的值?我的期望是这样的:
Entry.objects.order_by('alternate client') -->
| client | name |
| google | robert |
| facebook | linda |
| google | kate |
| facebook | jack |
| google | nina |
| facebook | pierre |
Run Code Online (Sandbox Code Playgroud)
如果有帮助,我正在使用django2.x和postgres.
编辑:
一些额外的信息/要求.
createdDateField.如果可能的结果也应按日期排序是否已经有一种方法可以根据id % 4 == 0django queryset 选择对象?
到目前为止我找到的唯一解决方案是编写自定义转换,因为在Postgresql中似乎支持modulo,但是我遇到了错误.
这是我的代码:
from django.db.models import Lookup, Transform
from django.db.models.fields import Field, IntegerField, AutoField
class Modulo4(Transform):
lookup_name = 'modulo4'
def as_sql(self, compiler, connection):
lhs, params = compiler.compile(self.lhs)
return "%s %% 4" % lhs, params
AutoField.register_lookup(Modulo4)
foos = Foo.filter(id__modulo4=0)
Run Code Online (Sandbox Code Playgroud)
在评估查询集时(使用foos.count()或者其他)我收到错误:
IndexError: tuple index out of range
Run Code Online (Sandbox Code Playgroud)
引用django文件.这似乎是由于模数,因为我设法使自定义转换与doc示例一起工作.
有关如何实现这一点的任何想法?