2011-01-04 2 views
1

Я использую ajax для отправки данных в представление django с данными, поступающими через запрос.POST. Я отправляю поле модели, которое необходимо обновить, а также значение модели. Мне просто нужно знать, как использовать переменную имени поля, которую я извлекаю из request.POST ['field_name'], поэтому я могу установить поле в модели. Вот мой код.django request.POST имя поля замена

field_name = request.POST["field_name"] 
field_value = request.POST["field_value"] 

member_id = get_member_session(request).id 
try: 
    member = Members.objects.get(id=member_id) 
except: 
    status="ERROR-USER-DOES-NOT-EXIST" 
    return json_status(status) 

try: 
    member.field_name=field_value 
    member.save() 
    return json_status('OK') 
except: 
    status = "USER_SAVE_ERROR" 
    return json_status(status) 

member.field_name, очевидно, не является правильным. Нужно ли использовать eval (field_name) или что-то в этом роде? Я бы предпочел не по возможности.

Большое спасибо

Rich

ответ

5

Использование setattr, который позволяет установить переменную атрибут объекта:

try: 
    member._meta.get_field(field_name) 
except member.FieldDoesNotExist: 
    # return something to indicate the field doesn't exist 
    return json_status('USER_FIELD_ERROR') 

setattr(member, field_name, field_value) 
member.save() 
return json_status('OK') 

редактировать: Я обновил использовать model._meta.get_field, так как это лучший подход , Упоминается в this answer for another question.

+0

Ничего себе, спасибо Alex! – Rich

+0

Извините, что убрал зеленый галочку, но я ввел код и получил следующую ошибку: 'argument of type' Members 'is iterable' на вашем 'if field_name in member:'. Я не понимаю, что это. Я удалил оператор «if», и он отлично работает, но лучше не говорить полностью, пока не узнаю ответ. Еще раз спасибо Alex – Rich

+0

Еще раз спасибо Alex! – Rich

Смежные вопросы