Динамическое добавление суффикса поля поиска к полю поиска

В настоящее время у меня есть этот довольно стандартный блок кода в моем файле views.py.

statsign является значением формы, также как и statinput.

Поле моей модели, по которому я хочу фильтровать мой набор запросов players, называется nba_avg_rating

if statsign == '>=' and len(statinput) > 0:
    players = players.filter(nba_avg_rating__gte=float(statinput)).order_by(sort)
elif statsign == '<=' and len(statinput) > 0:
    players = players.filter(nba_avg_rating__lte=float(statinput)).order_by(sort)
elif statsign == '=' and len(statinput) > 0:
    players = players.filter(nba_avg_rating__exact=float(statinput)).order_by(sort)

Как вы можете видеть, в настоящее время моя логика проверяет statsign на условие, фильтрует по полю модели + суффикс, т.е. >= приведет к фильтрации по nba_avg_rating__gte, так далее и так далее.

Моя цель - сделать это динамическим процессом, для чего я объединяю этот процесс в одну строку. У меня есть словарь поиска полей так

    field_lookup = {
    '>=': '__gte',
    '<=': '__lte',
    '=': '__exact'
}

Затем я выполняю итерацию, добавляя суффикс к имени поля, в коде, как показано ниже.

for item in field_lookup.items():
    if statsign == item[0] and len(statinput) > 0:
        players = players.filter((nba_avg_rating + item[1])=float(statinput)).orderby(sort)

Теперь очевидно, что приведенный выше код не работает, потому что nba_avg_rating - это выражение. Я могу объединить суффикс nba_avg_rating как строку и затем обернуть его в eval, но, увы, я не могу установить выражение =flost(statinput)

Есть мысли о том, что я могу здесь сделать?

Спасибо

По словам Даниила Ответ.

Вы можете сделать что-то вроде:

if statsign == '>=':
    statsign = 'gte'
elif statsign == '<=':
    statsign = 'lte'
elif statsign == '=':
    statsign = 'exact'
if len(statinput) > 0:
    kwargs = {
    '{0}__{1}'.format('nba_avg_rating', statsign): float(statinput),
    }

    Person.objects.filter(**kwargs).orderby(sort)
Вернуться на верх