Проверка формы без обязательного поля в django 1.8
Моя форма модели django позволяет пользователю отправлять форму без возникновения ошибки, даже если пользователь не отправил соответствующую форму, здесь он позволяет пользователю оставить поле электронной почты пустым. Он не сохраняется в базе данных из-за is_valid(), но страница обновляется и форма снова становится пустой... Вот код
models.py
from django.db import models
class MainForm(models.Model):
text = models.CharField(max_length=100)
email = models.EmailField(blank=False)
name = models.CharField(max_length=100,blank=False)
def __unicode__(self):
return self.email
forms.py
from django import forms
from .models import MainForm,new_model
class form_MainForm(forms.ModelForm):
class Meta:
model = MainForm
fields = '__all__'
views.py
def view_MainForm(request):
context = {
"form": form_MainForm
}
if request.method == 'POST' :
form_instance = form_MainForm(request.POST or None)
if form_instance.is_valid():
form_instance.save()
return render(request,'done.html',{'text':form_instance.cleaned_data.get('email')})
return render(request,'main_form.html',context)
шаблон ->main_form.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Main Form</title>
</head>
<body>
<form method="post" action=".">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit">
</form>
</body>
</html>
2 ответа
Ваша функция просмотра неверна - вы должны передать неверную форму в контекст, чтобы получить сообщения об ошибках, а именно:
def view_MainForm(request):
if request.method == 'POST' :
form_instance = form_MainForm(request.POST)
if form_instance.is_valid():
form_instance.save()
# here you should redirect to avoid
# re-submission of the form on page reload
# cf https://en.wikipedia.org/wiki/Post/Redirect/Get
return render(request,'done.html',{'text':form_instance.cleaned_data.get('email')})
else:
form_instance = form_MainForm()
context = {"form": form_instance}
return render(request,'main_form.html',context)
Проверьте эту ссылку для отображения ошибки в вашей форме https://docs.djangoproject.com/en/1.10/topics/forms/, это даст представление о том, почему вы не можете сохранить данные, когда вы отправляете обратно форму, она должна иметь значение context = {"form": form_MainForm(request.POST)}, при этом в форме будут отображаться отправленные значения