Есть ли способ выбрать объекты в соответствии с id % 4 == 0
в django queryset?Modulo в django 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)
И я получаю ошибку, когда QuerySet оценивается (с foos.count()
или любой другой):
IndexError: tuple index out of range
отсылая в файл Джанго. Кажется, это связано с модулем, так как мне удается сделать работу с пользовательским преобразованием с помощью doc example.
Любая идея о том, как достичь этого?
К сожалению, я бегу с django 1.7 :((должен был указать его в вопросе) – stellasia
@stellasia обновил мой ответ единственным методом, доступным для Django 1.7 –
Кажется, что не работает с параметрами% d, но я могу это сделать без опции. Большое спасибо! – stellasia