Я пытаюсь реализовать (что я думаю) довольно простую модель данных для счетчика:
class VisitorDayTypeCounter(models.Model):
visitType = models.CharField(max_length=60)
visitDate = models.DateField('Visit Date')
counter = models.IntegerField()
Когда кто-то приходит, он будет искать строку, которая соответствует visitType и visitDate; если эта строка не существует, она будет создана с помощью счетчика = 0.
Затем мы увеличиваем счетчик и сохраняем.
Меня беспокоит то, что этот процесс - это всего лишь гонка. Два запроса могли одновременно проверять, существует ли объект, и оба из них могут его создать. Между чтением счетчика и сохранением результата может пройти другой запрос и увеличить его (что приведет к потере счета).
До сих пор я действительно не нашел хорошего способа обойти это, будь то в документации Django или в учебнике (на самом деле, похоже, что у учебника есть условие гонки в части Vote).
Как мне сделать это безопасно?