問題: シグナル受信機は、特定の条件のモデル エントリが存在するかどうかを確認し、存在しない場合は新しいエントリを作成します。ごくまれに、エントリが重複しています。
レシーバー関数内:
try:
my_instance = MyModel.objects.get(field1=value1, field2=sender)
except:
my_instance = MyModel(field1=value1, field2=sender)
my_instance.save()
の明らかな候補ですget_or_create
が、そのコードをクリーンアップする以外に、get_or_create
ヘルプを使用するとこの問題を防ぐことができますか?
シグナルはユーザーアクションの後に送信されますが、元のリクエストが複製されているとは思われません。これは、他のアクションをトリガーしたからです。
重複は、数千回のインスタンスで数回発生しています。これは必然的に複数のリクエストによって引き起こされたものですか、それとも重複したスレッドが作成される可能性がありますか? そして、おそらく詳細なトランザクション管理を使用して、重複を防ぐ方法はありますか?
Django 1.1、Python 2.4、PostgreSQL 8.1、および Apache2 での mod_wsgi の使用。