使用下面的=,我可以按年龄筛选人员:

qs = Person.objects.filter(age = 20)
                             # ↑ Here

但对于下面的>,<,>=和<=,我无法根据年龄筛选人员:

qs = Person.objects.filter(age > 20)
                             # ↑ Here
qs = Person.objects.filter(age < 20)
                             # ↑ Here
qs = Person.objects.filter(age >= 20)
                             # ↑↑ Here
qs = Person.objects.filter(age <= 20)
                             # ↑↑ Here

然后,我得到了下面的错误:

name 'age'没有定义

我怎么能做大于(>),大于或等于(>=),小于(<)和小于或等于(>=)与过滤器()在Django?


当前回答

在字段age后面加上“大于”的__gt后缀:

Person.objects.filter(age__gt=20)
                    #    ↑↑↑↑ 
                    # age > 20

在字段名age后面加上“大于或等于”的__gte后缀:

Person.objects.filter(age__gte=20)
                    #    ↑↑↑↑↑ 
                    # age >= 20

在字段age后面加上“小于”的__lt后缀:

Person.objects.filter(age__lt=20)
                    #    ↑↑↑↑ 
                    # age < 20

在字段名age后面加上“小于或等于”的__lte后缀:

Person.objects.filter(age__lte=20)
                    #    ↑↑↑↑↑ 
                    # age <= 20

其他回答

比:

Person.objects.filter(age__gt=20)

大于或等于:

Person.objects.filter(age__gte=20)

不足:

Person.objects.filter(age__lt=20)

小于或等于:

Person.objects.filter(age__lte=20)

你可以在[文档].(https://docs.djangoproject.com/en/stable/ref/models/querysets/)中找到它们。

在字段age后面加上“大于”的__gt后缀:

Person.objects.filter(age__gt=20)
                    #    ↑↑↑↑ 
                    # age > 20

在字段名age后面加上“大于或等于”的__gte后缀:

Person.objects.filter(age__gte=20)
                    #    ↑↑↑↑↑ 
                    # age >= 20

在字段age后面加上“小于”的__lt后缀:

Person.objects.filter(age__lt=20)
                    #    ↑↑↑↑ 
                    # age < 20

在字段名age后面加上“小于或等于”的__lte后缀:

Person.objects.filter(age__lte=20)
                    #    ↑↑↑↑↑ 
                    # age <= 20