我有一个模型,上面有这个字段:
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://stackoverflow.com/questions/2257441/python-random-string-generation-with-upper-case-letters-and-digits"""
return ''.join(random.choice(string.ascii_lowercase + string.digits) for x in range(n))
但是,每当我尝试创建模型的新实例时,我都会收到此错误:
IntegrityError:重复键值违反唯一约束“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,并继续获取错误几分钟.然后它正确返回.是什么造成的?