Django jquery表单提交返回500

时间:2011-09-23 08:16:10

标签: django jquery django-forms

我正在尝试使用jquery进行模型提交是Django,我收到500服务器响应并且不确定如何继续。

这是我的js:

function addUpdate(e) {
    e.preventDefault();
    var form = jQuery(e.target);
    jQuery.ajax({
        url: form.attr('action'),
        type: form.attr('method'),
        data: form.serialize(),
        dataType: 'json',
        success: function(){
            $('<p>Been Added</p>').insertBefore("div.tr-list");
        }
    });
};

jQuery("form#tr-form").submit(function(e){
    addUpdate(e);
});

这是我的表格:

<input class="nidden" type="button" id="tr-trigger" value="Add Resource" />

    <form class="absolute" id="tr-form" action="{% url topic_resource_create topic.person.user topic.slug %}" method="POST">{% csrf_token %}
    <div id="tr-wrapper">
        {{ tr_form.as_p }}

        <input id="tr-submit" type="submit" value="Submit" />
        <input type="reset" value="Reset" />
    </div>
    </form>

这是我的观点:

def tr_create_xhr(request, slug):
    if request.method == "POST":
        form = TopicResourceForm(request.POST)
        try:
            r = Resource.objects.get(url=form.cleaned_data['resource'])
        except Resource.DoesNotExist:
            r = Resource.objects.create(url=form.cleaned_data['resource'], rtype=form.cleaned_data['rtype'])
            r.save()
        form.resource = r
        topic = Topic.objects.get(person__user=request.user, slug__iexact=slug)
        form.topic = topic
        if form.is_valid():
            form.save()
        response = serializers.serialize('json', form)

    if request.is_ajax():
        return HttpResponse(response, content_type="application/javascript")
    else:
        return HttpResponseRedirect("../..")

我不确定他们是否认为逻辑是正确的,因为每次尝试发布到网址时我都会收到500服务器错误。我有几个其他类似的表单提交给我同样的错误。

3 个答案:

答案 0 :(得分:1)

Firebug应该向您显示实际错误。但是,在这种情况下,问题可能出现在序列化代码中。您无法在表单上调用serializers.serialize - 根本没有任何意义。序列化程序可以处理查询集。

您需要做的是从保存表单中获取返回的对象,将其包装在列表中,然后将其序列化:

obj = form.save()
response = serializers.serialize('json', [obj])

但是,您的视图流也存在一些问题 - 例如,如果表单无效,则没有对象。

答案 1 :(得分:0)

通常意味着找不到jquery文件。看看你的html标头的来源。应该是这样的,如果你按照链接,你应该看到jquery脚本。

<script type="text/javascript" src="/static/js/jquery-1.6.2.js"></script>

您的基本模板会有类似这样的内容

<script type="text/javascript" src="{{ STATIC_URL }}js/jquery-1.6.2.js"></script>

您可能还会发现documentation on static文件很有用。

答案 2 :(得分:0)

也许是因为csrf保护?症状非常相似。 https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/

因此,您可以尝试在{% csrf_token %}<form>代码之间的某处添加</form>