Django:使用 JSON 数据创建和保存模型

Posted

技术标签:

【中文标题】Django:使用 JSON 数据创建和保存模型【英文标题】:Django: Create and save a model using JSON data 【发布时间】:2017-10-16 18:08:52 【问题描述】:

我正在构建一个应用程序,使用 Django 1.10 作为后端,使用 Angular 2 4.0 作为前端。

是否可以从 JSON 数据对象创建和保存模型实例?

示例:此型号:

class PartOne(models.Model):
  gender = models.SmallIntegerField(choices=[(1, "Male"), (2, "Female")])
  gender_na = models.BooleanField(default=False)
  height = models.SmallIntegerField()
  height_na = models.BooleanField(default=False)

JSON:

json = 
'gender': 1,
'gender_na':False,
'height':195,
'height_na':False

不想想手动创建模型:

PartOne.objects.create(gender=json['gender'], gender_na=json['gender_na'], height=json['height'], height_na=json['height_na]

我正在寻找一个自动化的解决方案,像这样:

PartOne.objects.create_from_json(json)

【问题讨论】:

您应该研究 django-rest-framework 及其序列化程序功能,这正是为此目的。 【参考方案1】:

你可以这样做,

PartOne.objects.create(**json)

您可以在调用函数时使用 **kwargs 语法,方法是构建关键字参数字典并将其传递给您的函数。

这记录在 section 4.7.4 of python tutorial. 的解包参数列表下。

另外,请注意,相同的 dict 不会传递给函数。创建了一个新副本,因此“json”不是 kwargs。

【讨论】:

有没有办法相同但给出一个 json 对象列表而不是单个对象? [f(**item) for item in json_list],也许吧? @zaidfazil 您可以遍历 Json 并单独保存。 for this_json in json: PartOne.objects.create(**this_json )【参考方案2】:

如果您想对数据进行更多验证或对输入进行更多控制,您可能还想查看modelform_factory。你也可以做一些好事,比如附加文件。

from django.forms.models import modelform_factory

form = modelform_factory(PartOne, fields=('gender', 'gender_na', 'height', 'height_na',))
populated_form = form(data=my_json)

if populated_form.is_valid():
    populated_form.save()
else:
    # do something, maybe with populated_form.errors

【讨论】:

以上是关于Django:使用 JSON 数据创建和保存模型的主要内容,如果未能解决你的问题,请参考以下文章

Django + Postgres:将 JSON 字符串作为 JSON 类型直接保存到模型中

使用 JSON 的 Django 导入向导

如何在 Django 中向模型添加临时字段?

在 Django 框架中使用动态模型

从 Django 模型中过滤 json 数据

Django - 使用模型和数据序列化复杂的上下文结构