Оцените выражение запроса как функцию модели Django и как фильтр подкласса QuerySet - PullRequest
0 голосов
/ 12 января 2020

Я хотел бы создать функцию (или пару функций) для модели, которая может возвращать целое число (полностью оцененное) или выражение запроса .

(пример кода может содержать синтаксические ошибки)

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()

...