Задать вопрос
@Just_Verin_Ger
Занимаюсь музыкой, но программировать хочется)

В форме не появляются ошибки валидации, что делать?

Не могу понять, почему у меня не выводится ошибка валидации
Примеры кода:

views.py:
def add_news(request):
    if request.method == "POST":
        form = NewsForm(request.POST)
        if form.is_valid():
            # news = News.objects.create(**form.cleaned_data)
            news = form.save()
            return redirect(news)
    else:
        form = NewsForm()
    return render(request, 'news/add_news.html', context={'form': form})


forms.py:
from django import forms
from .models import News
import re
from django.core.exceptions import ValidationError


class NewsForm(forms.ModelForm):
    class Meta:
        model = News
        # fields = '__all__'
        fields = ['title', 'content', 'is_published', 'category']
        widgets = {
            'title': forms.TextInput(attrs={'class': 'form-control'}),
            'content': forms.Textarea(attrs={'class': 'form-control', 'rows': 5}),
            'category': forms.Select(attrs={'class': 'form-control'})
        }

    def clean_title(self):
        title = self.cleaned_data['title']
        if re.match(r'\d', title):
            raise ValidationError('Название не должно начинаться с цифры')
        return title


Сама форма из html:
<form action="{% url 'add_news' %}" method='post'>
    {% csrf_token %}

    {% for field in form %}
    <div class="form-group">
        {{ field.label_tag }}
        {{ field }}
        <div class="invalid-feedback">
            {{ field.errors }}
        </div>
    </div>
    {% endfor %}
    <button type="submit" class="btn btn-primary btn-block">Добавить новость</button>
</form>


Уже что не перепробовал, делал через if return form.errors - не то, игрался с html - ничего не помогло... Кто подскажет?

5f7ed5c318150922715935.png
Вот о чем я говорю
  • Вопрос задан
  • 846 просмотров
Подписаться 1 Средний 2 комментария
Решения вопроса 1
@v__V__v
Разработчик
Эта проблема, к сожалению, все еще актуальна. Судя по всему, этот баг bootstrap'а надолго. Решается заменой .invalid-feedback на .text-danger. У меня лучше всего выглядит вот такой вариант (вспомогательные .mt- и т.п. убрал, у каждого они свои будут):
<div class="text-danger">
  <small>Some error message</small>
</div>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Just_Verin_Ger Автор вопроса
Занимаюсь музыкой, но программировать хочется)
В итоге сделал через {{ form.as_p }} в теге form в файле html, и все отобразилось как и хотел. Но если свою форму писать без модели, не смогу вывести. Буду искать ответ.
5f7ee03d5fcd7242726296.png
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Strikt Москва
от 100 000 до 180 000 ₽
ITK academy Саратов
от 75 000 ₽
Sim-Ba Pay Санкт-Петербург
от 180 000 ₽