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