Метод django forms is_valid() всегда возвращает true, если все обязательные поля формы имеют значение false

models.py создал модель registerForm. моя база данных - mysql.

from django.db import models

class registerForm(models.Model):
    name = models.CharField(max_length=50 )
    username = models.CharField( max_length=50)
    email = models.EmailField(max_length=50)
    password = models.CharField(max_length=50)
    class Meta:
        db_table = 'userForm'
    def __str__(self):
        return self.name    

forms.py

from django import forms
from django.forms import widgets
from login_and_logout.models import registerForm

class regForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        # first call parent's constructor
        super(regForm, self).__init__(*args, **kwargs)
        # there's a `fields` property now
        self.fields['name'].required = False
        self.fields['username'].required = False
        self.fields['email'].required = False
        self.fields['password'].required = False

    class Meta: 
        model = registerForm
        fields = "__all__"

views.py

check form is valid using is_valid() method . i printed 
    def signup(request):
    
        if request.method == 'POST':
            form = regForm(request.POST)

            print(form.is_valid())
    
            if form.is_valid():
                return HttpResponse('success')
            else:
                return  HttpResponse('fail')
        form = regForm()
        return render(request, 'signup.html', {'form': form})

Я пытаюсь реализовать проверку формы с помощью javascript на стороне клиента и проверку на стороне сервера в dajngo. для того, чтобы добиться проверки формы без атрибута required. Я задаю required false в dajngo forms.py. но после метод is_valid() всегда возвращает true. но если я удалю функцию inittion, которую я использовал для удаления требуемого поля в forms.py, то is_valid() работает. Я хочу удалить требуемое поле и также хочу, чтобы метод is_valid() работал.

В вашем операторе print(print(form.is_valid()) для действительной формы не было никакого условного оператора для проверки выполнения условия для сохранения действительной формы, поэтому он возвращает True.

 def signup(request):
        if request.method == 'POST':
            form = regForm(request.POST)
            # This where your conditional check for valid form starts from
            # So you are suppose to put the print statement below the condition if statement 
            # All the logic of validations starts from the if statement
            if form.is_valid():
                print(form.is_valid())
                data = form.save(commit=False)
                data.username = request.user 
                # whatever data that you want to check for validation  before saving it.
                data.save()
                return HttpResponse('success')
            else:
                return  HttpResponse('fail')
        form = regForm()
        return render(request, 'signup.html', {'form': form})
Вернуться на верх