web-dev-qa-db-ja.com

Djangoモデルフィールドを名前で設定する方法は?

これはとても単純なはずなので、何かが足りないに違いありません。モデルインスタンスのフィールドの値を名前で設定したいだけです。私が持っていると言う:

class Foo(Model):
  bar = CharField()

f = Foo()

フィールドにアクセスするのではなく、名前でバーの値を設定したい。だから次のようなもの:

f.fields['bar'] = 'BAR"

の代わりに

f.bar = 'BAR'

Setattrを試しましたが、データベースの値が保持されません。また、_meta.fieldsを調べてみましたが、途中でさまざまなエラーが発生しました。

30
Matt S.

setattrを介して値を変更する場合は、変更後にモデルを保存することを忘れないでください。過去に噛まれて値を変更したのですが、モデルを保存するのを忘れてしまい、同じ結果になりました。

setattr(f, 'bar', 'BAR')
f.save()
62
Paul McMillan

もっとコードを見なければならないかもしれません。

setattr(f, 'bar', 'BAR')

これはDjangoが内部的に行う方法です。

「保存」も呼び出していることを確認してください。

17
Joe Holloway