Python 如何编写表单验证,检查输入的值是否等于同一模型中已保存的值?
我试图构建一种用户输入“代码”的方法,如果代码与存储在单独模型字段中的值相同,则允许表单保存并更新名为“registered”的模型布尔字段 这是我的模型:Python 如何编写表单验证,检查输入的值是否等于同一模型中已保存的值?,python,django,django-models,django-forms,Python,Django,Django Models,Django Forms,我试图构建一种用户输入“代码”的方法,如果代码与存储在单独模型字段中的值相同,则允许表单保存并更新名为“registered”的模型布尔字段 这是我的模型: def random_key(size=25, chars=string.ascii_uppercase + string.digits): return ''.join(random.choice(chars) for _ in range(size)) class Keyreg(models.Model): u
def random_key(size=25, chars=string.ascii_uppercase + string.digits):
return ''.join(random.choice(chars) for _ in range(size))
class Keyreg(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
privKey = models.CharField(max_length=50, default=random_key, editable = False)
pubKey = models.CharField(max_length=50, default='feedme123')
registered = models.BooleanField(default=False)
这是我的模型:
class KeyregForm(forms.ModelForm):
class Meta:
model = models.Keyreg
fields = ('pubKey',)
def clean(self):
cleaned_data = super(KeyregForm, self).clean()
privKey = # data already saved in db... ?
pubKey = cleaned_data.get('pubKey')
if pubKey != privKey:
raise forms.ValidationError("Your Registration Is Invalid.")
return cleaned_data
以下是我的看法:
@login_required
def update_pubkey(request):
profile = get_object_or_404(Profile, user=request.user)
pubkey = get_object_or_404(Keyreg, user=request.user)
pub_key = Keyreg.objects.filter()
form = KeyregForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.save()
return HttpResponseRedirect("/me/keyzone/")
return render(request, 'keyzone.html', {'form':form, 'pubkey':pubkey,
'pub_key', pub_key})
任何帮助都是非常棒的,谢谢您的时间。如果您的模型实例已经在数据库中,那么只有您才能获得privKey。为此,您需要将Keyreg的实例传递给表单: 在您的视图中编辑此行:
form = KeyregForm(request.POST, instance=pubkey)
并修改清洁方法:
def clean(self):
cleaned_data = super(KeyregForm, self).clean()
if self.instance.pk:
privKey = self.instance.privKey
pubKey = cleaned_data.get('pubKey')
我不明白你的问题。你到底想实现什么?非常感谢迪克莎!这正是我们所需要的!