Как отфильтровать набор запросов с расчетом?

У меня есть модель, похожая на

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)
4 голоса | спросил epord 19 Maypm18 2018, 18:14:32

1 ответ


0
Решение этой проблемы может быть решено в 2 этапа:Аннотировать ---- +: = 0 =: + ---- выражениеСравните аннотированное выражение с ---- +: = 1 =: + ---- значениемДля аннотирования выражения Django ORM поддерживает выражения func, которые предоставляют функции базы данных, такие как COALESCE , LOWER , SUM , ABS и многие другие.Для вашего примера вы можете использовать этот запрос:
ответил T.Tokic 19 Maypm18 2018, 19:38:35

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132