Django не показывает ValidationError на моем сайте
Ребята, я новичок в Django. Я смотрю уроки на youtube и получаю разные результаты. Я использую Django==2.0.7 и Python==3.6.5.
I try to get error on my page, if I write not correct name of title, but I don't get it. Look at func - **def clean_title(self, *args, kwargs), I hope, you understand, what I mean. There I have "raise forms.ValidationError("Error")", but it doesn't work anymore.
forms.py
from django import forms
from .models import Product
class ProductForm(forms.ModelForm):
title = forms.CharField(label='',
widget=forms.TextInput(attrs={"placeholder": "title"}))
Description = forms.CharField(
required=False,
widget=forms.Textarea(
attrs={
"placeholder": "Your description",
"class": "new-class-name two",
"id": "new-class-name two",
"rows": 20,
'cols':120
}
)
)
Price = forms.DecimalField(initial=199.99)
class Meta:
model = Product
fields = [
'title',
'Description',
'Price'
]
def clean_title(self, *args, **kwargs):
title = self.cleaned_data.get('title')
if "Ruslan" in title:
return title
else:
raise forms.ValidationError("Error")
В файле forms.py я создал класс ProductForm и объявил поля. На моей странице я вижу это. Также я определил cleanan_title. Я хотел получить ошибку, если я заполню неправильное название заголовка.
views.py
from django.shortcuts import render
from .models import Product
from .forms import ProductForm as CreateForm, PureDjangoForm
def create_form(request):
form = CreateForm(request.POST or None)
if form.is_valid():
form.save()
form = CreateForm()
context = {
'form': form
}
return render(request, "create_product_form.html", context)
create_product_form.html
{% extends 'base.html' %}
{% block content %}
<form action='.' method="POST"> {% csrf_token %}
{{ form.as_p }}
<input type='submit' value='Save' />
</form>
{% endblock %}
Это мой файл.html, он наследует все неважные детали от base.html.
Ребята, что не так, помогите, пожалуйста, не могу понять, как я могу получить ошибку, если название заголовка не правильное? Я вижу все поля на своей странице и могу их заполнить, но ошибок не выдает.
Вы должны несоздавать новую форму, если вы создали недействительную, представление таким образом должно выглядеть так:
def create_form(request):
if request.method == 'POST':
form = CreateForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('name-of-some-view')
else:
form = CreateForm()
context = {
'form': form
}
return render(request, 'create_product_form.html', context)
Примечание: В случае успешного POST запроса, вы должны сделать
redirect
. [Django-doc] для реализации паттерна Post/Redirect/Get [wiki]. Это позволяет избежать повторения POST-запроса, когда пользователь обновляет браузер. браузер.