Django использует строку для фильтрации модели, чтобы избежать повторения - PullRequest
0 голосов
/ 05 мая 2018

Я пытаюсь повторить как можно меньше в моем коде покупки столкнулись с проблемой.

Мой код выглядит так

from .models import source

def myfunction():
    if  category1 == True:
        types=5
        b=[None]*types
        for i in range(0, types):
            b[i]=source.objects.all().filter(rowdata1='identifier', state=i)

    elif category2 == True:
        types=3
        b=[None]*types
        for i in range(0, types):
            b[i]=source.objects.all().filter(rowdata2='identifier', state=i)
    .
    .
    .
    return result

Однако я бы хотел сделать что-то вроде этого:

def myfunction():
    if  category1 == True:
        types=5
        param='rowdata1'

    elif category2 == True:
        types=3
        param='rowdata2'

    b=[None]*types
        for i in range(0, types):
            b[i]=source.objects.all().filter(param='identifier', state=i)
    .
    .
    .
    return result

Есть ли способ использовать строку или другую структуру для использования в качестве значения фильтра для доступа к модели в Django? Когда я пробую свой пример 2, я получаю ошибку поля, первая работает.

Рабочее предложение:

def myfunction():
    if  category1 == True:
        types=5
        param='rowdata1'

    elif category2 == True:
        types=3
        param='rowdata2'

    b=[None]*types
    for i in range(0, types):
        b[i]=source.objects.all().filter(**{param:'identifier'}, state=i)
    .
    .
    .
    return result

1 Ответ

0 голосов
/ 05 мая 2018

Используя распаковку ключевого слова , это можно сделать так:

.filter(state=i, **{param: 'identifier'})

или, если вы предпочитаете:

.filter(**{param: 'identifier', 'state': i})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...