Использовать строку как параметр в функции - PullRequest
1 голос
/ 14 октября 2011

Я пытаюсь использовать строку в качестве параметра в функции. Возможно ли что-то подобное?

from django.contrib.auth.models import User

param_var = 'contains'
User.objects.filter(first_name__{param_var}='John')

# ideally, this should equate to:
User.objects.filter(first_name__contains='John')

Ответы [ 2 ]

3 голосов
/ 14 октября 2011
param_var = 'contains'
User.objects.filter(**{'first_name__%s'%param_var: 'John'})

Хотя я действительно задаюсь вопросом о целесообразности этого ... Я думаю, что вы, возможно, заново изобретаете инъекцию sql ...

Я подозреваю, что есть лучший способ.Вы, вероятно, должны объяснить больше того, что вы пытаетесь достичь.

1 голос
/ 10 января 2012

Решено:

# Something like this...
qs = User.objects.all()

parameters = {
    'name': {
        'type': 'get',
        'filter': [
            'first_name__icontains',
            'last_name__icontains',
            # ...
        ],
    },
    # ...
}

for parameter, data in parameters.items():
    if data['type'] == 'get':
        value = request.GET.get(parameter, None)
    elif data['type'] == 'getlist':
        value = request.GET.getlist(parameter)

    if value:
        query = Q()

        for f in data['filter']:
            query = query | Q(**{ f : value })
        qs = qs.filter(query)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...