Я использую django, но я думаю, что этот вопрос в первую очередь принадлежит самому Python.Использование названных аргументов как переменных
У меня есть что-то вроде:
def get(self, request, arg, *args, **kwargs):
if kwargs['m0'] == 'death':
if kwargs['m1'] == 'year':
result = Artists.objects.filter(death_year=arg)
elif kwargs['m1'] == 'month':
result = Artists.objects.filter(death_month=arg)
elif kwargs['m1'] == 'day':
result = Artists.objects.filter(death_day=arg)
elif kwargs['m0'] == 'birth':
if kwargs['m1'] == 'year':
result = Artists.objects.filter(birth_year=arg)
elif kwargs['m1'] == 'month':
result = Artists.objects.filter(birth_month=arg)
elif kwargs['m1'] == 'day':
result = Artists.objects.filter(birthh_day=arg)
Где death_year
именованный аргумент, что это поле в моей модели Artists
, представляющий столбец в моей базе данных. Переменные «m0» и m1
передаются от urlconf
к моей функции get (это фактически метод get
в моем классе). Могу ли я контролировать значение имени переменной death_year
без использования цепочки if else if (например, death_month
или birth_year
)? Поскольку у меня есть много вариантов, мне придется использовать нелепо очень длинную условную цепочку, которая ведет к этой же строке, но с другим именованным аргументом.
Я очень сомневаюсь, что вы должны понять всю эту проблему, чтобы ответить на вопрос. Исходный вопрос прост: могу ли я использовать именованный аргумент и его соответствующее значение как переменные в Python?
У вас есть пример того, какое значение имеет значение 'arg'? 'Model.objects.filter (** dic)' отлично действует там, где 'dic = {'death_year': 'foo'}' – Sayse
Спасибо @Sayse, я на самом деле пробовал это, но получил «Исключение типа: FieldError» «Исключение Значение: Невозможно разобрать запрос по ключевому слову в качестве dict. –
. Вы должны показать, что вы пытались, как я уже сказал, совершенно корректно, поэтому это будет скорее проблема с тем, что 'arg' is – Sayse