Rod*_*ogo 1 django django-models
我在我做了以下内容model.py为它生成一个唯一的标识符:
12 def rand_key(size):
13 return ''.join([random.choice(string.letters + string.digits) for i in range(size)])
14
15
16 class Share(models.Model):
17
20 resource_content_type = models.ForeignKey(ContentType)
21 resource_object_id = models.PositiveIntegerField()
22 resource_content_object = generic.GenericForeignKey('resource_content_type', 'resource_object_id')
23
24 identifier = models.CharField(max_length=16,unique=True,default=rand_key(16))
Run Code Online (Sandbox Code Playgroud)
问题是,当尝试连续保存两条记录时,会duplicate key value violates unique constraint "share_share_identifier_key"弹出错误消息.我确信这是一个常见的功能.
我做错了什么?
谢谢
编辑:让我只添加创建的第一条记录没有任何问题,标识符字段具有一个普遍的"随机"值.是在发生冲突的第二个记录的cration.似乎该rand_key函数以某种方式被缓存.
问题是您将随机函数的输出分配给默认参数.然后,所有条目的值都相同.试试这个代码
def rand_key(size):
return ''.join([random.choice(string.letters + string.digits) for i in range(size)])
class Share(models.Model):
resource_content_type = models.ForeignKey(ContentType)
resource_object_id = models.PositiveIntegerField()
resource_content_object = generic.GenericForeignKey('resource_content_type', 'resource_object_id')
identifier = models.CharField(max_length=16, unique=True)
def save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
if self.identifier is None:
self.identifier = rand_key(16)
models.Model.save(self, force_insert, force_update, using, update_fields)
Run Code Online (Sandbox Code Playgroud)
这将在每次保存条目时生成随机字符.
| 归档时间: |
|
| 查看次数: |
2173 次 |
| 最近记录: |