Django querysets с использованием __lte

Могу ли я сделать что-то подобное в django/python без жесткого кодирования?

def get_rating_average(self, type):
               return list(super().aggregate(Avg(type)).values())[0]

def filter_rating_average_under(self, type):
               return super().filter(type__lte=self.get_rating_average(type=type))
               # FILTER WHERE rating_type is smaller than average type keyword#

#In my views.py I call something like this:

    context['item8'] = Stock.aggregators.filter_rating_average_under(type='mykeyword')

Я не хочу жестко кодировать ключевое слово в поле, поэтому есть ли способ отформатировать этот код? Чтобы {type}__lte работал и я мог выполнить этот запрос с разными ключевыми словами, а не только с одним?

Да, вы можете использовать:

from django.db.models import Q

def get_rating_average(self, type):
    return super().aggregate(result=Avg(type))['result']

def filter_rating_average_under(self, type):
    return super().filter(
        Q((f'{type}__lte', self.get_rating_average(type=type)))
    )
Вернуться на верх