首页 文章

Django模型表单验证没有显示

提问于
浏览
0

我需要在Django ModelForm字段上进行一些验证 . 所以我在models.py中改变了2行(就在下面) . 验证是必要的阻塞,但我找不到显示ValidationError的正确方法 . 也许在模型表单中有更简洁的方法可以做到这一点?

models.py

class Lexicon(models.Model):

    [...]

    alphanumeric = RegexValidator(r'^[0-9a-zA-Z]*$', _('Only alphanumeric characters are allowed'))
    filename = models.CharField(_("Filename"), max_length=40, validators=[alphanumeric])

forms.py

class LexiconForm(forms.ModelForm):
    class Meta:
        model = Lexicon
        fields = ['filename', 'language', 'comment', 'alphabet', 'case_sensitive', 'diacritics']

views.py

@login_required
def new_pls_view(request):
    if request.method == 'POST':
        form = LexiconForm(request.POST)
        if form.is_valid():
            obj = form.save(commit=False)
            obj.user = request.user
            obj.save()
            return redirect('pls_edit')
    else:
        form = LexiconForm()
    return render(request, 'main/new_pls.html', {
        'form': form,
    })

template.html

<form class="form-horizontal" method="post" action="{% url 'new_pls' %}">
    {% csrf_token %}

{% if form.non_field_errors %}
    <div class="alert alert-danger" role="alert">
        {% for error in form.non_field_errors %}
            {{ error }}
        {% endfor %}
    </div>
{% endif %}

[...]

{% if form.is_bound %}
    {% if form.filename.errors %}
        {% for error in form.filename.errors %}
            <div class="invalid-feedback">
                {{ error }}
            </div>
        {% endfor %}
    {% endif %}

    {% if form.filename.help_text %}
        <small class="form-text text-muted">{{ form.filename.help_text }}</small>
    {% endif %}
{% endif %}

{% render_field form.filename type="text" class+="form-control" id="plsFilename" placeholder=form.filename.label %}

正如@Alasdair建议的那样用 {{ form }} 替换我的整个表单是有效的,所以我猜我的模板渲染有问题 .

1 回答

  • 0

    我只是简单地替换了我的错误打印并打印错误!

    <form class="form-horizontal" method="post" action="{% url 'new_pls' %}">
        {% csrf_token %}
    
        {{ form.non_field_errors }}
    
        [...]
    
        {{ form.filename.errors }}
        {% render_field form.filename type="text" class+="form-control" id="plsFilename" placeholder=form.filename.label %}
    

相关问题