gpt4 book ai didi

Django,自动生成唯一的模型字段,如果不唯一则递归调用自动生成器

转载 作者:行者123 更新时间:2023-12-01 09:38:22 24 4
gpt4 key购买 nike

我正在开发一个 Django 项目,其中除了标准的自动递增 ID 整数字段外,Thing 还具有唯一的 10 位 key 。我使用一个简单的随机数函数来创建它。 [我相信也有更好的方法来做到这一点]

创建事物时,会创建一个 10 位数的 key 。我使用 .validate_unique() 来检查 key 的唯一性。如果它不是唯一的,是否有一种简单的方法可以递归调用 key 生成器(makeKey())直到它通过?代码如下:

模型.py:

class Thing(models.Model):
name=models.CharField(max_length=50)
key=models.IntegerField(unique=True)

View .py:
def makeKey():
key=''
while len(key)<10:
n=random.randint(0,9)
key+=`n`
k=int(key)
#k=1234567890 #for testing uniqueness
return k

def createThing(request):
if ( request.method == 'POST' ):
f = ThingForm(request.POST)
try:
f.is_valid()
newF=f.save(commit=False)
newF.key=makeKey()
newF.validate_unique(exclude=None)
newF.save()
return HttpResponseRedirect(redirect)

except Exception, error:
print "Failed in register", error
else:
f = ThingForm()
return render_to_response('thing_form.html', {'f': f})

谢谢

最佳答案

这里不需要递归 - 一个基本的 while 循环就可以了。

newF = f.save() 
while True:
key = make_key()
if not Thing.objects.filter(key=key).exists():
break
newF.key = key
newF.save()

关于Django,自动生成唯一的模型字段,如果不唯一则递归调用自动生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3928016/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com