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