私は(私が思うに)カウンター用の非常に単純なデータモデルを実装しようとしています:
class VisitorDayTypeCounter(models.Model):
visitType = models.CharField(max_length=60)
visitDate = models.DateField('Visit Date')
counter = models.IntegerField()
誰かがやってくると、visitTypeとvisitDateに一致する行を探します。この行が存在しない場合は、counter=0で作成されます。
次に、カウンターをインクリメントして保存します。
私の懸念は、このプロセスが完全に人種であるということです。2つのリクエストが同時にエンティティが存在するかどうかを確認し、両方がエンティティを作成する可能性があります。カウンターを読み取ってから結果を保存するまでの間に、別の要求が発生してそれをインクリメントする可能性があります(結果としてカウントが失われます)。
これまでのところ、Djangoのドキュメントでもチュートリアルでも、これを回避する良い方法は見つかりませんでした(実際、チュートリアルの投票部分に競合状態があるようです)。
これを安全に行うにはどうすればよいですか?