Django 中使用 F() 进行模数查询

2024-01-07

我想过滤 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(使用前将#替换为@)

Django 中使用 F() 进行模数查询 的相关文章

随机推荐