Визуализировать ValidationError в шаблоне - PullRequest
1 голос
/ 02 октября 2019

Я создаю страницу для добавления товаров в интернет-магазин пользователем, и у меня возникают проблемы с отображением ValidationError в моем шаблоне. ValidationError повышается, если выбранная категория не является самой определенной категорией для выбора. Чтобы выбрать категорию, пользователь должен пройти через зависимый комбинированный список со списком, где вы начинаете с одного комбинированного списка для основной категории, и как только вы выбираете основную категорию, появляется другой <select> для выбора подкатегории и так далее, пока самая внутренняя подкатегория не будетвыбран. В зависимости от выбранной категории отображается другая ModelForm. category - это поле в моей базовой модели Продукта (от которого наследуются другие модели, такие как Book или Shoes), и оно не указано во внутренних полях Meta-класса ModelForms, поэтому у меня не может быть метода clean_category на моемModelForms.

Вот мой взгляд:

@login_required
def product_create_view(request):
    if request.method == 'POST':
        main_category = request.session.get('main_category')
        create_product_form = mappings[main_category](request.POST)
        if create_product_form.is_valid():
            obj = create_product_form.save(commit=False)
            category = request.session.get('category')
            if Category.objects.get(id=category).is_leaf_node():
                obj.category = Category.objects.get(id=category)
                obj.save()
            else:
                raise forms.ValidationError('Please select most specific category.')
    return render(request, 'products/product_create.html', {
        'categories': Category.objects.filter(parent=None)
    })

Как отобразить ошибку ValidationError в шаблоне, т.е. как я могу получить ValidationError в моем {{ field.errors }}? В настоящее время я вижу трассировку стека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...