我想过滤 Django 对象,使其“id modulo K == N”。
这是在 python 中执行此操作的一种方法,但我希望它在 filter() 中:
for foo in Foo.objects.all():
if foo.id % K == N:
print foo
因此,我可以将 extra() 与这样的查询一起使用(如果我错了,请纠正我):
Foo.objects.extra(其中['id %% %s = %s' % (K,N)])
但有没有办法使用F() https://docs.djangoproject.com/en/dev/ref/models/queries/#django.db.models.F?
Django 支持使用 F() 对象进行加法、减法、乘法、除法和模运算
注意:这是非常错误的:
Foo.objects.filter(id=F('id') % K)
我需要类似的东西:
Foo.objects.filter(id__mod(K)=N)
Django 1.8 允许您在注释中使用 F() 对象。语法是:
Foo.objects.annotate(id_mod=F('id') % K).filter(id_mod=n)
该功能已于#14030 https://code.djangoproject.com/ticket/14030。对于早期版本的 Django,您可以使用extra()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)