如何在其他字段上过滤Django Queryset?

Saq*_*Ali 5 python django orm django-queryset

这是我的Django模型:

from django.db import models
class MyModel(models.Model):
    a = models.IntegerField()
    b = models.IntegerField()
    c = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)

我想取出这个模型中的所有实例a = 5b + c > 10。我该怎么做?

当我尝试这个:

print MyModel.objects.filter(a=5).extra(
    select={"total_count": "b + c"},
    where=["total_count > 10"],
)
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

OperationalError: (1054, "Unknown column 'total_count' in 'where clause'")
Run Code Online (Sandbox Code Playgroud)

lev*_*evi 2

可以转换b + c > 10b > 10 - c然后使用F内置函数

MyModel.objects.filter(a=5).filter((b__gt=10-models.F('c'))
Run Code Online (Sandbox Code Playgroud)

使用 Djangoextra()不太安全

每当使用 extra() 时都应该非常小心。每次使用时,都应该使用 params 对用户可以控制的任何参数进行转义,以防止 SQL 注入攻击。请阅读有关 SQL 注入防护的更多信息。