【问题标题】:Django with ajax render带有ajax渲染的Django
【发布时间】:2015-05-19 20:20:45
【问题描述】:

我对 Django 很陌生,我尝试创建我的第一个应用程序。但是我现在遇到了一个问题。

我有一个带有 Django 验证的表单(用于添加警报 - 我的 mdoel)和一个包含所有警报列表的 div。如果我正确填写所有字段,则会添加警报,并使用 ajax 刷新带有警报的 div。问题在于表单验证。

如果没有 ajax,我会为每个字段发送带有 errorLists 的绑定表单。我使用了 Django 表单 API。它工作正常,但如果添加表单无法成功,我无法刷新错误列表。

我没有得到表单渲染或没有上下文渲染 - 所有字段都是空白的。当然,如果我在一个字段中犯了错误并且没有 ajax 也可以正常工作,那么它们不应该是空白的。

一堆代码,首先这是我调用的视图方法:

def add_alert(request):
    report = __get_or_create_empty_Report(request)
    if request.method == 'POST':
        form = AlertForm(request.POST)
        if form.is_valid():

            alert_project = ""
            alert_name = ""
            alert_ticket = ""
            alert_date = ""
            alert_type = ""
            alert_comment = ""

            if form.cleaned_data.has_key('alert_project'):
                alert_project = form.cleaned_data['alert_project']
            if form.cleaned_data.has_key('alert_name'):
                alert_name = form.cleaned_data['alert_name']
            if form.cleaned_data.has_key('alert_ticket'):
                alert_ticket = form.cleaned_data['alert_ticket']
            if form.cleaned_data.has_key('alert_date'):
                alert_date = form.cleaned_data['alert_date']
            if form.cleaned_data.has_key('alert_type'):
                alert_type = form.cleaned_data['alert_type']
            if form.cleaned_data.has_key('alert_comment'):
                alert_comment = form.cleaned_data['alert_comment']

            alert = Alert()
            alert.alt_prj_id = get_object_or_404(Project, prj_id=alert_project)
            alert.alt_name = alert_name
            alert.alt_ticket = alert_ticket
            alert.alt_date = alert_date
            alert.alt_type = alert_type
            comment = Comment()
            comment.com_value = alert_comment
            comment.save()
            alert.alt_com_id = comment
            alert.alt_rep_id = report

            alert.save()
            alerts  = Alert.objects.filter(alt_rep_id=report.rep_id)
            return render(request, 'main/theform.html', {'form': form, 'alerts': alerts, 'error_message': "Alert has been added"})
    else:
        form = AlertForm()
        alerts  = Alert.objects.filter(alt_rep_id=report.rep_id)
        return render(request, 'main/theform.html', {'form': form, 'alerts': alerts})

    alerts  = Alert.objects.filter(alt_rep_id=report.rep_id)
    return render(request, 'main/theform.html', {'form': form, 'alerts': alerts, 'error_message': "Alert has NOT been added"})

这是表单模板:

    {% extends 'main/base.html' %}


{% block content %}
    <div id="alerts"> </div>
        {% for alert in alerts %}
            <p> {{ alert.alt_name }} </p>
        {% endfor %}


        <form class="col-md-12" action="{% url 'main:add_alert' %}" method="post">
            {% csrf_token %}
            {{ form.as_p }}
            <input type="submit" value="Submit" />
        </form>
        {{ error_message }}


{% endblock %}

和简单的脚本:

    $(document).ready(function() {

        //AJAX util
        $('.add-alert-form').submit(function (e) {
            e.preventDefault();
            $.ajax({
                type: "POST",
                url: $(this).attr("action"),
                data: $(this).serialize(),

                success: function (data) {
                    $("#alerts").load(" #alerts");
                }
            });
        });
   }

我认为我做错了,但我不知道什么是正确的方法。

【问题讨论】:

    标签: python ajax django forms validation


    【解决方案1】:

    看看https://docs.djangoproject.com/en/1.7/topics/forms/modelforms/ 所以你的观点看起来像这样:

            if form.is_valid():
                obj = form.save()
                data = serializers.serialize('json', [obj,])
            else:
                data = json.dumps(dict([(k, [unicode(e) for e in v]) for k,v in form.errors.items()]))
    
            return HttpResponse(data, mimetype='application/json')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      • 2018-11-30
      • 2022-09-27
      • 2020-02-28
      • 1970-01-01
      • 2013-07-05
      相关资源
      最近更新 更多