Я хотел бы создать функцию (или пару функций) для модели, которая может возвращать целое число (полностью оцененное) или выражение запроса .
(пример кода может содержать синтаксические ошибки)
class Square(Func):
arity = 1
function = "square_me"
class PeopleQS(QuerySet):
def by_bmi(self, target_bmi: int) -> "PeopleQS":
return self.filter(bmi__lte=target_bmi+1, bmi__gte=target_bmi-1)
class Person(models.Model):
height = models.FloatField()
weight = models.FloatField()
people = PeopleQS.as_manager()
# can't be a @property in the real code
def bmi(self) -> int:
return F("weight")/Square(F("height")).convert_value()
Однако, когда я пытаюсь что-то подобное, я получаю <lambda>() missing 3 required positional arguments: 'value', 'expression', and 'connection'
или какую-то другую ошибку в выводе.
Я предполагаю, что мне нужны две функции, bmi_qe
и bmi_int
(которые просто принимают bmi_qe
и привязывают .convert_value()
к нему, поэтому я могу одновременно выполнять Person.people.by_bmi(23)
и Person.people.get(pk=1).bmi_int()