django request.POST замена имени поля - PullRequest
1 голос
/ 04 января 2011

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

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

1 Ответ

5 голосов
/ 04 января 2011

Используйте 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')

edit: я обновил, чтобы использовать model._meta.get_field, так как это лучший подход,Упоминается в этот ответ на другой вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...