Python Django unique random作为默认值
在将某个值指定为默认值时,是否有方法检查该值是否存在于模型中?如果赋值存在(它不是唯一的),则生成另一个值。(阅读评论): 也许解决方法不能在Python Django unique random作为默认值,python,django,Python,Django,在将某个值指定为默认值时,是否有方法检查该值是否存在于模型中?如果赋值存在(它不是唯一的),则生成另一个值。(阅读评论): 也许解决方法不能在唯一_rand内部,而是在个人类内部。 我不想重写save方法,因为在save之前我需要code。另外,我不想使用uuid随机变量。只需测试循环中是否存在生成的代码 from django.contrib.auth.models import User def unique_rand(): while True: code = p
唯一_rand
内部,而是在个人
类内部。
我不想重写
save
方法,因为在save
之前我需要code
。另外,我不想使用uuid随机变量。只需测试循环中是否存在生成的代码
from django.contrib.auth.models import User
def unique_rand():
while True:
code = password = User.objects.make_random_password(length=8)
if not Person.objects.filter(code=code).exists():
return code
class Person(models.Model):
code = models.CharField(max_length=8, unique=True, default=unique_rand)
请注意,default=unique\u rand
参数中没有圆括号
如果要限制尝试次数,请将循环从while
更改为for
:
def unique_rand():
for _ in range(5):
...
raise ValueError('Too many attempts to generate the code')
请注意,@catavaran已将
default=unique\u rand()
更改为default=unique\u rand
。它的创建使得每次创建Person
对象时都会调用unique\u rand()
函数。否则,在模型初始化时只调用一次,这一定是一个争用问题!想象一下p1=Person();p2=Person()
p1.code可能与p2.code相同,因为它们尚未保存。这种情况怎么样?!然后将引发IntegrityError
异常。M:在我看来,这在你的要求中是不可能的。是的,我认为这是不可能的。至少作为一个简单的解决方案。生成的代码应存储在其他地方。顺便说一句,谢谢你的帮助。
def unique_rand():
for _ in range(5):
...
raise ValueError('Too many attempts to generate the code')