Python 如何编写表单验证,检查输入的值是否等于同一模型中已保存的值?

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

我试图构建一种用户输入“代码”的方法,如果代码与存储在单独模型字段中的值相同,则允许表单保存并更新名为“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):
    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})
  • 我正在寻找pubKey(用户输入)等于privKey
  • 如果pubKey==privKey,则保存表单并将registed更改为TRUE

  • 任何帮助都是非常棒的,谢谢您的时间。

    如果您的模型实例已经在数据库中,那么只有您才能获得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')
    

    我不明白你的问题。你到底想实现什么?非常感谢迪克莎!这正是我们所需要的!