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-запроса, когда пользователь обновляет браузер. браузер.

Вернуться на верх