【问题标题】:Iterating through a data list and edit an object's attribute based on the list遍历数据列表并根据列表编辑对象的属性
【发布时间】:2013-04-12 06:11:04
【问题描述】:

我想检索 PUT 数据列表,遍历该列表并根据列表中的属性更新对象。我的代码如下:

         property_id = data['id']
            if property_id:
                property_selected = Property.objects.get(id=property_id)
                if property_selected:
                    for d in data:
                        property_selected.d = data[d]
                    property_selected.save()

但是,这将不起作用,因为当属性称为 name 时,它​​将值保存为 property_selected.d 而不是 property_selected.name。有谁知道我应该如何解决这个问题?

【问题讨论】:

    标签: python django django-models tastypie


    【解决方案1】:

    您可以执行以下操作(使用 iteritems()setattr()):

    for key, value in data.iteritems():
        setattr(property_selected, key, value)
    

    但您可能应该限制允许编辑的字段:

    for key, value in data.items():
        if key in ['foo_field', 'bar_field']:
            setattr(property_selected, key, value)
    

    【讨论】:

      【解决方案2】:

      要通过名称设置属性,您可以使用 django 模型实例的 setattr 方法

      setattr(property_selected, d, data[d])

      来源:How to set django model field by name?

      【讨论】:

      • 要动态获取属性,您可以使用 getattr(property_selected, d)
      【解决方案3】:

      使用内置函数setattr

      for d in data:
          setattr(property_selected, d, data[d])
      

      a number of answers 使用 setattr 正在启发阅读。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-04
        • 1970-01-01
        相关资源
        最近更新 更多