使用一个或多个项目(动态)创建Django对象

时间:2019-08-09 15:01:07

标签: django dictionary django-models

是否可以使用model.objects.create(<dict>)

说我的模型有很多可选字段。我只想传递一个有任何内容的字典,而不是像这样手动分配每个字段:

Model.objects.create(thing=data['prop'],...)

这是一个更清晰的(伪代码)示例:说我有一个模型了

class MyModel(models.Model):
  thing=models... // all these fields null=True, blank=True
  another=...
  possibly_another=...
  ...

data = {'thing': 'value for thing', 'another': 'value for another'}

MyModel.objects.create(data)

在此示例中,我的data没有possibly_another,甚至还有更多。我已经尝试过这样做,但是出现位置错误arg ...我做了一些google-foo,而且我的条款不能正确。 (我更像一个节点/ js的人)

有没有一种方法可以只传递dict并让create方法找出其中的内容?

1 个答案:

答案 0 :(得分:1)

您可以使用两个连续的星号(**)进行字典解包

MyModel.objects.create(**data)

如果字典包含例如data = { 'a': 4, 'b': 2 },则如果执行字典解压缩f(**data),它将使用f(a=4, b=2)调用该函数。

请注意,对于缺少的值,您应该在这些字段中使用default=...参数。

相关问题