Django如何使用modelform来显示错误消息

时间:2014-11-26 06:54:44

标签: python django

我使用django modelform来保存数据,
我使用ajax,因此它不会重定向到其他页面。 提交时,视图create_post将处理它。

但我有一个问题,如果我在电子邮件中输入'abc'并提交。
我知道它不会通过验证,但它不会打印错误消息,让用户知道错误在哪里 如何编辑才能到达它? 请指导我。谢谢。

[编辑] 当我编辑此return render(request, "zh_tw/maininfo.html#5thpage",{form: 'form'})时 现在如果我在电子邮件字段中输入'abc',帖子就是200 ok 但当它回显到这个页面时,它会提醒'错误!' 好像它在ajax中运行这部分:              error: function(ts){ alert('ERROR!!!'); window.location.reload(); },

模板/ main.html中

<script type="text/javascript">
$( document ).ready(function() {
    $.ajaxSetup({
        data: { csrfmiddlewaretoken: '{{ csrf_token }}' },
    });

    // Submit post on submit
    $('#create_post').on('submit', function(event){
        event.preventDefault();
        var name = $("#name").val();
        var email = $("#email").val();
        var message = $("#message").val();

        $.ajax({
            url: '{% url 'core:create_post' %}',
            data: { "name":name,"email":email,"message":message,},
            type: 'POST',
            async: false,
            dataType: 'json',
            error: function(ts){
                alert('ERROR!!!');
                window.location.reload();
            },
            success: function(dataArr){
                if(dataArr == 2){
                    alert('success!');
                    window.location.reload();
                }else{
                    alert('something wrong!');
                    window.location.reload();
                }
            }
        });
    });
});
</script>

<div class="section" id="contact">
    <div class="message">
        <form action="." method="POST" id="create_post">
        {% csrf_token %}
        {{ form.non_field_errors }}
        {{ form }}
        <div>
            <input type="text" name="FirstName" id="name" placeholder="your name">
            <input type="text" name="Email" id="email" placeholder="your email">
        </div>
        <textarea placeholder="talk?" name = "Message" id="message"></textarea>
        <br>
        <button type="submit" value="Submit" id="submit">submit</button>
        </form>
    </div>
</div>

views.py

def maininfo(request):
    # return render(request, 'english/maininfo.html',)
    return render(request, 'zh_tw/maininfo.html',)


def create_post(request):
    if request.method == 'POST':
        form = MessageForm(request.POST)
        if form.is_valid():
            obj = form.save(commit=False)
            obj.ip = request.META['REMOTE_ADDR']
            obj.save()
            return HttpResponse(2)
        return render(request, "zh_tw/maininfo.html#5thpage",{form: 'form'})

1 个答案:

答案 0 :(得分:0)

这将呈现表单错误并在您拥有它们时形成非字段错误。

<div class="section" id="contact">
    <div class="message">
        <form action="." method="POST" id="create_post">
        {% csrf_token %}
        {{ form.non_field_errors }}
        {{ form }}
        <button type="submit" value="Submit" id="submit">submit</button>
        </form>
    </div>
</div>

这是一个有点改进的观点:

def create_post(request):
    form = MessageForm(request.POST or None)
    if form.is_valid():
        obj = form.save(commit=False)
        obj.ip = request.META['REMOTE_ADDR']
        obj.save()
    return render_to_response(request, template="your_template.html", context={form: 'form'})