【问题标题】:Is it possible to pass a dictionary with extraneous elements to a Django object.create method?是否可以将带有无关元素的字典传递给 Django object.create 方法?
【发布时间】:2012-06-03 15:28:18
【问题描述】:

我知道在 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'],
)

【问题讨论】:

  • 你必须手动指定每个字段。
  • 你可以指定更少但不能更多

标签: python django django-models dictionary


【解决方案1】:

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

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

【讨论】:

  • 仅 2.7。在此之前你需要做**dict((key, value) for...)
猜你喜欢
  • 1970-01-01
  • 2021-02-24
  • 2020-12-02
  • 2021-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-20
相关资源
最近更新 更多