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