【问题标题】:Django: Create and save a model using JSON dataDjango:使用 JSON 数据创建和保存模型
【发布时间】: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 及其序列化程序功能,这正是为此目的。

标签: json django django-models


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-19
    • 2011-05-09
    • 2016-07-07
    • 1970-01-01
    • 2015-01-31
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多