У меня есть модель с этим полем:
token = models.CharField(max_length=32, default="", unique=True, null=False, db_index=True)
В методе save () я установил для этого поля случайную строку из 32 символов, используя этот метод:
def save(self, *args, **kwargs):
if (self.token is None or len(self.token) == 0):
self.token = random_identifier()
super(SessionPassthrough, self).save(*args, **kwargs)
def random_identifier(n=32):
""" Generate a random identifier of length n.
From /1924709/generatsiya-sluchainoi-stroki-s-zaglavnymi-bukvami-i-tsiframi"""
return ''.join(random.choice(string.ascii_lowercase + string.digits) for x in range(n))
Однако я получаю эту ошибку всякий раз, когда пытаюсь создать новый экземпляр модели:
IntegrityError: duplicate key value violates unique constraint "wakelytics_sessionpassthrough_token_key"
Чтобы создать экземпляр, я вызываю этот метод:
@staticmethod
def for_session(session):
sp, c = SessionPassthrough.objects.get_or_create(session=session)
return sp
Вызывает ли get_or_create () функцию save () метода перед записью в базу данных? Ответ: Да
Я получаю IntegrityError всякий раз, когда я вызываю метод в первый раз с session
, и продолжаю получать ошибку в течение нескольких минут.Затем он возвращается правильно.Что вызывает это?