【发布时间】:2011-04-25 02:08:09
【问题描述】:
我正在开发一个 Django 项目,其中除了标准的自动递增 ID 整数字段外,Thing 还具有唯一的 10 位密钥。我使用一个简单的随机数函数来创建它。 [我相信还有更好的方法来做到这一点]
创建事物时,会创建一个 10 位数的密钥。我使用 .validate_unique() 来检查密钥的唯一性。如果它不是唯一的,有没有一种简单的方法可以递归调用密钥生成器(makeKey())直到它通过?代码如下:
模型.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})
谢谢
【问题讨论】:
标签: django validation model unique