我有一个类似于
的模型class House:
x = IntegerField()
y = IntegerField()
我希望使用以下计算返回距离某个位置距离较小距离的房屋:
abs(house.x - myPos.x) + abs(house.y - myPos.y) < distance
但我不知道如何制作该过滤器,因为filter()只与模型的字段进行比较。我想做点什么:
House.objects.filter(abs(x - myPos.x) + abs(y - myPos.y) < distance)
答案 0 :(得分:3)
可以通过两个步骤解决此问题的解决方案:
abs(x - myPos.x) + abs(y - myPos.y)
表达式distance
值为了注释表达式Django ORM支持func expressions提供数据库功能,如 COALESCE , LOWER , SUM ,< strong> ABS 等等。
对于您的示例,您可以使用此查询:
from django.db.models import Func, F
House.objects.annotate(abs_calculation=Func(F('x') - myPos.x, function='ABS') + Func(F('y') - myPos.y, function='ABS')).filter(abs_calculation__lt=distance)