В формах Django я не могу использовать валидаторы regex

Добрый день. Я хочу использовать валидатор regex для поля full_name в Django 1.11.10. Но когда я запускаю приведенный ниже код, он не работает. Как я могу это исправить?

forms.py

class CustomerForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
       super(CustomerForm, self).__init__(*args, **kwargs)
       self.fields['orderorbarcode'].widget.attrs['readonly'] = True
       self.fields['orderorbarcode'].label = "Order ID or Item Barcode"
       self.fields['full_name'].label = "Full Name"
       self.fields['phone_number'].label = "Phone Number"
       self.fields['full_name'].widget = forms.TextInput(attrs={'placeholder': '*required'})
       self.fields['email'].widget = forms.TextInput(attrs={'placeholder': '*required'})
       self.fields['phone_number'].widget = forms.TextInput(attrs={'placeholder': '*required'})


    class Meta:
        model = Customer
        fields = (
        'orderorbarcode','full_name','company','email',
        'phone_number','note')



        AlphanumericValidator = RegexValidator(r'^[0-9a-zA-Z]*$', 'Only alphanumeric characters are allowed.')

        full_name = forms.CharField(max_length=50, validators=[AlphanumericValidator])

Вы можете просто использовать валидатор в моделях вместо форм (если full_name является полем модели):

from django.core.validators import RegexValidator

validate_alphanumeric = RegexValidator(r'^[a-zA-Z0-9]*$', 'Only alphanumeric characters are allowed.')

class MyModel(models.Model):
    full_name = models.CharField(max_length=50, validators=[validate_alphanumeric])

ИЛИ в вашей модели:

class CustomerForm(forms.ModelForm):
    # form field moved to the top (instead of being after Meta class)
    AlphanumericValidator = RegexValidator(r'^[0-9a-zA-Z]*$', 'Only alphanumeric characters are allowed.')
    full_name = forms.CharField(max_length=50, validators=[AlphanumericValidator])    
    
    def __init__(self, *args, **kwargs):
        # code

    class Meta:
        model = Customer
        fields = (
        'orderorbarcode','full_name','company','email',
        'phone_number','note')
Вернуться на верх