我有一个模型,其中包含以下字段:
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 https://dev59.com/mnE95IYBdhLWcg3wkeof"""
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()函数?答案:是的
每当我第一次使用session
调用该方法时,它会产生IntegrityError,并且在几分钟内持续出现错误。然后它会正确返回。这是什么原因造成的?