Джанго JQuery формы представления возвращая 500 - PullRequest
0 голосов
/ 23 сентября 2011

Я пытаюсь отправить модель в Django с jquery, и я получаю ответ от сервера 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 серверов каждый раз, когда пытаюсь опубликоватьна URL.У меня есть пара других похожих форм, которые выдают мне ту же ошибку.

Ответы [ 3 ]

1 голос
/ 23 сентября 2011

Firebug должен показать вам фактическую ошибку.Однако в этом случае кажется вероятным, что проблема в вашем коде сериализации.Вы не можете позвонить serializers.serialize в форму - это не имеет никакого смысла вообще.Сериализаторы работают с набором запросов.

Вам нужно получить объект, возвращенный после сохранения формы, обернуть его в список и затем сериализовать его:

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

Однако вытакже есть некоторые проблемы с потоком в вашем представлении - нет объекта, если форма недействительна, например.

0 голосов
/ 23 сентября 2011

Может это из-за csrf-защиты? Симптомы очень похожи. https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/

Таким образом, вы можете попробовать добавить {% csrf_token %} где-нибудь между <form> и </form> тегами.

0 голосов
/ 23 сентября 2011

обычно означает, что не может найти файлы 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>

Вы также можете найти документацию о статических файлах полезной.

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