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 に答える