无法保存通过_from_json方法创建的现有模型实例

时间:2016-06-23 14:27:28

标签: python django mongoengine

from_json mongoengine的方法ModelClass用于:

  

将json数据转换为未保存的文档实例

如果我向服务器json发送一些已更改的字段并尝试转换为未保存的文档实例,则他们不会跟踪模型中的_changed_fields,例如_changed_fields始终为空。

data = self.request.data  # json representation of object
model_instance = SomeModel.from_json()
print(model_instance._changed_fields)  # get empty list

据我所知,ModelInstance的.save方法只保存已更改的字段并在_changed_fields属性中进行检查。因此,如果此属性始终为空 - 无法保存通过from_json方法创建的模型实例。

问题 - 如何保存从json创建的模型实例?

1 个答案:

答案 0 :(得分:1)

你不能这样做吗?

data = self.request.data
model_instance = SomeModel(**data)
print(model_instance._changed_fields)  # should not be empty
model_instance.save()  # should work

<强>说明:

在python中,如果函数或类接受参数(args)和命名参数(kwargs),可以分别从list / tuple(my_list)和字典(my_dict)中填充它们。

要求:

  • 列表/元组必须包含与位置参数数量相同的元素
  • 字典可以包含我们想要的键/值,但只匹配与命名参数匹配的键

示例:

def foo(a, b, c=None, d=1):
    pass

class Foo(object):
    def __init__(self, a, b, c=None, d=1):
        pass

my_list = [1, 2]
my_dict = {'c': 3, 'd': 4}

你可以这样做:

test = foo(*my_list, **my_dict)

obj = Foo(*my_list, **my_dict)

我希望它有所帮助。