【问题标题】:django request.POST field name substitutiondjango request.POST 字段名称替换
【发布时间】:2011-06-03 04:44:39
【问题描述】:

我正在使用 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) 或类似的东西吗?如果可能的话,我宁愿不这样做。

非常感谢

丰富

【问题讨论】:

    标签: django


    【解决方案1】:

    使用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.中提到

    【讨论】:

    • 很抱歉收回绿色勾号,但我将代码放入并收到以下错误:'如果成员中的字段名称:'上的'成员'类型的参数不可迭代'。我看不出它是什么。我已经删除了“if”语句,它工作得很好,但最好在我知道答案之前不要说完全正确。再次感谢亚历克斯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 2021-05-31
    • 2011-02-21
    • 2015-06-01
    • 1970-01-01
    • 2017-07-01
    • 2017-01-15
    相关资源
    最近更新 更多