相关疑难解决方法(0)

通过交替值来订购查询集

我有以下型号:

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.

编辑:

一些额外的信息/要求.

  • 我有大约10到20个不同的客户
  • Entry还有一个createdDateField.如果可能的结果也应按日期排序
  • 我想对Entry使用分页,所以解决方案应该是使用django的ORM

django postgresql django-models django-queryset

10
推荐指数
1
解决办法
1425
查看次数

django queryset中的模数?

是否已经有一种方法可以根据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示例一起工作.

有关如何实现这一点的任何想法?

django

8
推荐指数
1
解决办法
1258
查看次数