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

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

Похожие вопросы