nav*_*yad 6 json django-models
我有json数据,如:
{
"firstname": "nav",
"lastname": "yad",
"age": 22
}
Run Code Online (Sandbox Code Playgroud)
我为模型Geek定义了一个自定义方法,以便从json对象中保存它.
def jsonToModel(self, jsonObj):
data = json.loads(jsonObj)
self.firstname = data['firstname']
self.lastname = data['lastname']
self.age = data['age']
Run Code Online (Sandbox Code Playgroud)
在模型中保存json对象如:
>> obj = Geek()
>> obj.jsonToModel(jsondata)
>>obj.save
Run Code Online (Sandbox Code Playgroud)
现在我想更新一个现有的模型实例说,我有以下json数据的模型实例id = 1
{
"lastname": "kumar"
}
>> ob = Geek.objects.get(id=1)
Run Code Online (Sandbox Code Playgroud)
现在我怎么能这样做没有明确使用fieldname(lastname).
>> ob.*field* = *data_for_field*
>> ob.save()
Run Code Online (Sandbox Code Playgroud)
Jon*_*ans 10
如果您要将JSON数据转换为整个应用程序中的模型,那么最好使用现有的解决方案之一,例如精彩的Django REST Framework.它的工作方式很像提交Django表单,并提供了许多重要的安全和清理样板.
如果您决定推出自己的实现,则可以使用setattr().这将允许您在模型上设置任意属性,因此您可以执行以下操作:
json_data = {"lastname":"kumar"}
ob = Geek.objects.get(id=1)
for key, value in json_data.items():
setattr(ob, key, value)
ob.save()
Run Code Online (Sandbox Code Playgroud)
但是,这有点危险,因为它允许将任意键设置为对象的属性.为避免这种情况,您可以在Geek模型上创建另一种方法:
def update_field(self, key, value):
# This will raise an AttributeError if the key isn't an attribute
# of your model
getattr(self, key)
setattr(self, key, value)
Run Code Online (Sandbox Code Playgroud)
然后你可以使用:
json_data = {"lastname":"kumar"}
ob = Geek.objects.get(id=1)
for key, value in json_data.items():
ob.update_field(key, value)
ob.save(update_fields=json_data.keys()) # This will only save the updated keys
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3504 次 |
| 最近记录: |