djangoでは、呼び出され、uniqueid、フィールド指定子、および値が渡される単純なメソッドを作成しました。次に、フィールドの値を更新するための簡単な追加を行います。私はそれをいくつかの方法でコード化し、データベースを保存、更新、または更新しようとするとgetattrが機能しないという結論に至りました。私のコードの 一つの変形:django getattrと更新に関する問題
def updatetable(uid, fieldtitle, value):
workingobj = bog_db.objects.get(name=uid)
objectcall = getattr(workingobj,fieldtitle)
objectcall = F(fieldtitle) + value
workingobj.refresh_from_db()
return
私は問題を把握できたかどうかを確認するためにいくつかのコードを妨害手を試してみました。 ところで:代わりに、Djangoはあなたがデシベルコールと更新を行うためのgetattrを使用したくないように私には見えるとなり37
In [36]: call = getattr(workingobj,fieldname)
In [37]: call
Out[37]: 37
In [38]: call += value
In [39]: call
Out[39]: 74
In [40]: workingobj.save()
#refreshed database, checked table, values in db not updated
In [41]: workingobj.total_number_posts += value
In [42]: workingobj.total_number_posts
Out[42]: 74
In [43]: workingobj.save()
#refreshed database, values in db were updated
値は=あなたが明示的にobject.field呼び出すしたいと考えています。
これは本当ですか? getattrは属性のコピーを作成しますか?私はなぜそれがこのように行動しているのかをよりよく理解したい。
おかげ
私は、簡単な更新メソッドを書くことができ、フィールドを渡して簡単な数学を行うことができる方法としてgetattrを使用しようとしていました。私はその後、フィールドを明示的に参照する2つの異なるメソッドを使用するためにコードを微調整しました。私はgetattrが実際に属性にアクセスし、そのコピーを作成しないと考えていました。私は今あなたがコードをよく見ていることを意味しています。ありがとう。 –
最終的に私は問題の一部が私がproject.modelsインポートモデルから抜けていたことを知りました。モデルオブジェクトを変数として渡すことができました。次に、変数を更新できるように、getattrとsetattrの組み合わせを思いつきました。 –