【问题标题】:Create a model object using the json where all keys are not model's fields使用 json 创建模型对象,其中所有键都不是模型的字段
【发布时间】:2019-04-14 15:05:46
【问题描述】:

我有一个模型如下:

class Person(models.Model):
    name = model.CharField(max_length = 255)
    mobile = model.IntegerField(null = True)
    city = model.CharField(max_length = 255)

现在我需要使用 json 创建模型对象,如下所示:

data = { "name" : "John", 
        "age" : 31, 
        "city" : "New York", 
        "mobile" : 1234432156,
        "address" : "xyz" }

在上面的json中,namemobilecityPerson模型中的字段。我必须使用上面的 json 创建一个模型对象。我是这样做的:

Person.objects.create(**data)

但它会抛出一个错误,说'age' is invalid keyword argument for this function。我的理解是,由于模型中没有年龄字段,因此会引发错误。

如何使用这样的 json 创建模型实例,其中所有键都不是模型中的字段。

【问题讨论】:

  • 但是您期望年龄值会发生什么?你为什么要把它包括在内?
  • 感谢您的回复。这是代表我的问题的示例问题。该json不是由任何人创建的,它是从数据库查询中生成的。相比之下,age 可能不会在这里使用,但可以在其他地方使用。
  • 这不是 JSON,这是 Python 字典。

标签: python django database django-models django-orm


【解决方案1】:

除非您知道您的数据与您的模型具有相同的“形状”(即具有相同的字段),否则最好明确地写出来:

Person.objects.create(name=data['name'], mobile=data['mobile'], city=data['city'])

(这是explicit is better than implicit 时刻之一。)

【讨论】:

  • 感谢您的回复。我也做过同样的事情。我在模型中编写了一个函数并将数据传递给该函数。该函数的作用与您在 create 中所做的相同
猜你喜欢
  • 1970-01-01
  • 2019-10-09
  • 2015-02-01
  • 2021-10-30
  • 2022-12-01
  • 1970-01-01
  • 2011-05-10
  • 2015-09-20
  • 1970-01-01
相关资源
最近更新 更多