6

我知道在 Django 中使用 MyModel.objects.create 时,可以传入一个字典,其中的键对应于 MyModel 中的模型字段。这在此处的另一个问题中进行了解释:Can a dictionary be passed to django models on create?

但是,我试图传入一个键比模型字段多的字典——换句话说,一些键没有用于创建对象。有可能以某种方式做到这一点吗?例如:

data_dict = {
    'key1': value1,
    'key2': value2,
    'key3': value3,
}

class MyModel(models.Model):
    key1 = models.SomeField()
    key2 = models.SomeField()

m = MyModel.objects.create(**data_dict)

当我尝试这个时,我收到一条错误消息,告诉我“'key3' 是此函数的无效关键字参数”。我是否错误地传递了字典?是否有不同的方法将其传递给模型,这意味着模型不必使用所有参数?或者我是否只需像这样手动指定每个字段:

m = MyModel.objects.create(
    key1 = data_dict['key1'],
    key2 = data_dict['key2'],
)
4

1 回答 1

8

您可以过滤,然后以这种方式传递您的字典:

MyModel.objects.create(**{key: value for key, value in data_dict.iteritems() if key in MyModel._meta.get_all_field_names()}).

于 2012-05-29T12:04:56.430 回答