Метод 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})