1

保存するための私のコードは次のとおりです。

keys={"key1","key2"}
mydict={key: value for (key, value) in data.items() if key in keys}
m=Modelname(**mydict)
m.save()

ここでdataは、キーと値の配列のようなものです。すべてを保存するのではなく、 で使用できる一部のキーのみを保存しますkeys。上記の保存は機能していてクールですが、更新するにはどうすればよいですか? リソースは同じですが、操作は更新されています。私は1つの方法を知っています:

m=Modelname.objects.get(name="ramesh")
m.college = "some other name to update"
m.save()

これで、新しい大学名で更新されます。しかし、保存を使用して行ったように、どうすれば直接行うことができますか? data指定したキーには、更新する値とともにキーが含まれています。

4

2 に答える 2

2

@San4ezが提案することは正しいです。

ただし.save、モデルのメソッドは、1つの列/フィールドのみを変更する場合でも、データベースで行全体をフラッシュ/書き換えることに注意してください。

updateパフォーマンスと同時実行性を向上させる別の方法は、選択した列のみを更新するQuerysetの方法を使用することです。

したがって、「name」にunique制約がある場合(フィルターが1つの結果のみを返すように)。

Modelname.objects.filter(name="ramesh").update(**mydict)

djangoの将来のバージョンがメソッドでこの機能を提供できるように、現在作業が行われています.save。詳細はこちら

編集:注目に値するのは、上記の方法を使用することを選択した場合、djangoのドキュメントにあるように、post / pre信号はdjangoによって発行されず、通常、.saveモデルのメソッドは呼び出されないという事実です。

于 2012-05-01T13:15:28.830 に答える
0
m = Modelname.objects.get(name="ramesh")
for key, value in data.items():
    if key in keys:
        setattr(m, key, value)
m.save()
于 2012-05-01T11:12:45.987 に答える