来自 json 的 Django 模型实例化
Django Model instanciation from json
我已经使用 manage.py dumpdata some_app.SomeModel > some_app_SomeModel.json
下载了多个模型的数据,并且正在尝试以编程方式加载文件,如下所示:
with open('some_app_SomeModel.json', encoding='utf-8') as data_file:
json_data = json.loads(data_file.read())
for model_data in json_data:
model_data = model_data['fields']
SomeModel.objects.create(**model_data)
不幸的是,这对外键字段不起作用:id 值未转换为相应的模型实例,我得到 ValueError: Cannot assign "1": "SomeModel.fk_field" must be a "FK_Model" instance.
,其中“1”是 fk 字段的 json 值.
如何简单地解决这个问题?
如果fk_field
,那么你可以分配给fk_field<b>_id</b>
,因此你可以将其重写为:
with open('some_app_SomeModel.json', encoding='utf-8') as data_file:
json_data = json.loads(data_file.read())
for model_data in json_data:
model_data = model_data['fields']
<strong>model_data['fk_field_id'] = model_data.pop('fk_field')</strong>
SomeModel.objects.create(**model_data)
请注意,您的项目应包含主键,否则不能说这些将 link 到 JSON 文件中具有主键的对象。
我已经使用 manage.py dumpdata some_app.SomeModel > some_app_SomeModel.json
下载了多个模型的数据,并且正在尝试以编程方式加载文件,如下所示:
with open('some_app_SomeModel.json', encoding='utf-8') as data_file:
json_data = json.loads(data_file.read())
for model_data in json_data:
model_data = model_data['fields']
SomeModel.objects.create(**model_data)
不幸的是,这对外键字段不起作用:id 值未转换为相应的模型实例,我得到 ValueError: Cannot assign "1": "SomeModel.fk_field" must be a "FK_Model" instance.
,其中“1”是 fk 字段的 json 值.
如何简单地解决这个问题?
如果fk_field
,那么你可以分配给fk_field<b>_id</b>
,因此你可以将其重写为:
with open('some_app_SomeModel.json', encoding='utf-8') as data_file:
json_data = json.loads(data_file.read())
for model_data in json_data:
model_data = model_data['fields']
<strong>model_data['fk_field_id'] = model_data.pop('fk_field')</strong>
SomeModel.objects.create(**model_data)
请注意,您的项目应包含主键,否则不能说这些将 link 到 JSON 文件中具有主键的对象。