可以在创建时将字典传递给django模型吗?

106 python django django-models django-queryset

有可能用列表,字典或其他东西做类似的事情吗?

data_dict = {
    'title' : 'awesome title',
    'body' : 'great body of text',
}

Model.objects.create(data_dict)
Run Code Online (Sandbox Code Playgroud)

如果我可以延长它,那就更好了

Model.objects.create(data_dict, extra='hello', extra2='world')
Run Code Online (Sandbox Code Playgroud)

Ala*_*air 189

如果titlebody是模型中的字段,则可以使用**运算符在字典中提供关键字参数.

假设您的模型被调用MyModel:

# create instance of model
m = MyModel(**data_dict)
# don't forget to save to database!
m.save()
Run Code Online (Sandbox Code Playgroud)

至于你的第二个问题,字典必须是最后的论据.再次,extra并且extra2应该在模型字段.

m2 =MyModel(extra='hello', extra2='world', **data_dict)
m2.save()
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这正是我想要做的.另外,作为旁注,仅基于您的帖子.使用Model.objects.create(**data_dict)时,不必调用save方法.你可能已经知道这一点,但只是一个抬头. (11认同)
  • 我对'ForeignKey'有所了解.如果你的模型有一个名为`owner`的`ForeignKey`,那么你的`data_dict`应该有一个`owner_id`字段.但是`django.forms.model_to_dict()`返回一个带有'owner`字段的字典.所以你不能做`MyModel(**model_to_dict(my_instance))`; 你必须将`owner`字段重命名为`owner_id`. (9认同)
  • 我之前没有使用过`objects.create`方法,所以你教会了我一些新东西. (4认同)
  • objects.create返回指向新模型的指针,并填入有效的pk.这意味着您可以立即使用它来构建相关模型. (2认同)