我知道这应该是非常基本的,但不知何故我不太明白。我想获取所有年龄小于 18 岁的用户,因此查询应该是这样的
User.objects.filter(age < 18)
我做错了什么?
为了使用小于过滤器进行过滤,您可以使用__lt查找 [Django-doc]:
User.objects.filter(age__lt=18)Run Code Online (Sandbox Code Playgroud)
或者,如果您想过滤某些字段表达式的属性,您可以先注释:
from django.db.models import F
User.objects.annotate(
age=F('age1') + F('age2')
).filter(age__lt=18)Run Code Online (Sandbox Code Playgroud)
或者如果你想减去一个数字:
from django.db.models import F
User.objects.annotate(
ageminus=F('age') - 5
).filter(ageminus__lt=18)Run Code Online (Sandbox Code Playgroud)
在这个例子中,User对象没有age字段,但有一个age1andage2字段。首先我们引入一个注解age,即这两个字段的总和。
通过写入.filter(age < 18),Python 解释器将查找名为 的变量age,如果确实存在(不是 per),则将其与 进行比较18,并将结果作为位置参数传递给filter(..)。因此,除非您使用某些代理对象,如 SqlAlchemy 那样,否则将无法工作。