Djangoビューでは、データベースの既存のテキスト列の最後に文字列データを追加する必要があります。たとえば、「ATable」という名前のテーブルがあり、「aField」という名前のフィールドがあるとします。私は競争条件のない方法で "aField"の最後に文字列を追加できるようにしたいと思います。当初、私はこれを持っていた:Django:更新呼び出しのテキストフィールドにF式を使用する
tableEntry = ATable.objects.get(id=100)
tableEntry.aField += aStringVar
tableEntry.save()
問題は、これが同時に実行されている場合、両方が、同じ「tableEntry」、そして、それらはそれぞれ独立に更新し、勝利を「保存」する最後のものを得る失うことができるということですデータはもう一方によって追加されます。
私はこのにビットを見て、私はF式を使用して、働くことを望んでいるこれを見つけた:
ATable.objects.filter(id=100).update(aField=F('aField') + aStringVar)
ここでの問題は、私はSQLエラーが、言って取得されています
operator does not exist: text + unknown
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
"str(aStringVar)"に変更しようとしましたが、それは既にストリングです - 運がいいな...私は同様の問題について不平を言っているカップルのdjangoバグ報告を見つけましたが、修正または回避策は見当たりませんでした。 FString式のテキストに追加できるように、aStringVarをキャストできる方法はありますか? BTW - "str(F( 'aField'))+ aStringVar"を試しましたが、F式の結果を文字列 "(DEFAULT:)"に変換しました。
に変更されました。sqlquery Djangoが実行しようとしていますか? – Willian
[文字列連結でDjango F()オブジェクトを使用することはできますか?](http://stackoverflow.com/questions/3300944/can-i-use-django-f-objects-with-string-concatenation) – Alasdair
ダニエルのもう一つの質問についての説明はかなり確定していると思います。あるいは、[custom sql](https://docs.djangoproject.com/ja/dev/topics/db/sql/#executing-custom-sql-directly)を書いて更新を実行することもできます。 – Alasdair