Python RegexField未通过验证

Python RegexField未通过验证,python,django,django-forms,Python,Django,Django Forms,作为表单的一部分,我使用了一个带有regex模式的RegexField。提交表单后,当到达security\u code=cleaned\u data['security']时,我会收到一个keyrerror 我知道,一旦调用表单的is_valid()方法,经过清理的_数据字典只保留通过验证的键/值。然而,我不理解为什么在这种情况下,用户提供给表单字段的字符串没有通过验证 如果我将RegexField切换为CharField,则两个字段的数据都会显示在清理后的数据中 from django im

作为表单的一部分,我使用了一个带有regex模式的RegexField。提交表单后,当到达
security\u code=cleaned\u data['security']
时,我会收到一个keyrerror

我知道,一旦调用表单的is_valid()方法,经过清理的_数据字典只保留通过验证的键/值。然而,我不理解为什么在这种情况下,用户提供给表单字段的字符串没有通过验证

如果我将RegexField切换为CharField,则两个字段的数据都会显示在清理后的数据中

from django import forms

class CreditCardForm(forms.Form):
    cc_number = forms.CharField()
    security = forms.RegexField(r'^\d{3}', max_length=3)

    def clean(self):

        cleaned_data = super().clean()
        card_number = cleaned_data['cc_number']
        security_code = cleaned_data['security']

        if card_number and security_code:
            if card_number.startswith('4') and len(security_code) != 3:
                raise forms.ValidationError("Invalid credit card information")

使用
cleaned\u data.get('security')
,当字段未通过验证时,将返回
None
。如果表单无效,您应该使用错误重新呈现表单提交的值中有哪些未通过验证?是否有些信用卡有4位安全代码
clean()
是一个catchall函数,在验证各个字段后调用。如果任何字段未通过验证,则它们在
clean()
中将不可用。我正在输入数字(如1、84等)。那么,验证程序是否根据表单中提供的字符串提供了regex参数?
class CommentPage(View):
    def get(self, request):
        cc_form = CreditCardForm()
        return render(request, 'member_access/access.html', {'form' : cc_form})

    def post(self, request):

        submitted_cc_form = CreditCardForm(request.POST)

        if submitted_cc_form.is_valid():
            return HttpResponse("Submission successful!")
        return HttpResponse(reverse('member_access:user_login'))