我正在开发一个Django项目,其中一个Thing会有一个唯一的10位数字Key,除了标准的自动递增的ID integerfield之外。我使用一个简单的随机数函数来创建它(我相信也有更好的方法)。
当创建一个Thing时,会创建一个10位数字的Key。我使用.validate_unique()来检查Key的唯一性。如果不唯一,是否有一种简单的方法可以递归调用Key生成器(makeKey())直到通过为止?以下是代码:
Models.py:
当创建一个Thing时,会创建一个10位数字的Key。我使用.validate_unique()来检查Key的唯一性。如果不唯一,是否有一种简单的方法可以递归调用Key生成器(makeKey())直到通过为止?以下是代码:
Models.py:
class Thing(models.Model):
name=models.CharField(max_length=50)
key=models.IntegerField(unique=True)
Views.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})
谢谢你
exists()
检查和save()
之间有相同的条目插入数据库会怎样? - Mitar