是否可以使用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方法找出其中的内容?
答案 0 :(得分:1)
您可以使用两个连续的星号(**
)进行字典解包:
MyModel.objects.create(**data)
如果字典包含例如data = { 'a': 4, 'b': 2 }
,则如果执行字典解压缩f(**data)
,它将使用f(a=4, b=2)
调用该函数。
请注意,对于缺少的值,您应该在这些字段中使用default=...
参数。