Удвоенные POST-запросы вместо одиночных - PullRequest
4 голосов
/ 29 октября 2010

У меня есть страница редактирования для моего объекта. Поскольку я разделил данные на две вкладки, я использую jquery-ui. На первой вкладке (#core_data) я загружаю основные данные объекта. Форма отправляется через Ajax:

<form method="post" class="object_form" id="event-core-form" action="{% url edit_event_data event.id %}" enctype="multipart/form-data">
    {{ form.as_p }}
    <p>
        <input class="object-submit" id="event-data-save" type="submit" value="Save data">
    </p>
</form>

ЯШ:

$("#event-data-save").livequery("click", function() {
    $("#event-core-form").ajaxSubmit({
        "success": function(data) {
            data = JSON.parse(data)
            $("#core-data").html(data["form"]);               
        }
    });
    return false;
})

и функция запускается, и моя отладка говорит, что она вызывается сразу 2 раза:

def edit_event_data(request, event_id,):
    template_name="management/core_event.html" 
    event = get_object_or_404(Event, pk=event_id)
    form = EventForm(instance=event, data=request.POST)

    if form.is_valid():
        form.save()
        form = EventForm(instance=event)

    form_html = render_to_string(template_name, RequestContext(request, {
        "event" : event,
        "form" : form,
    }))

    result = simplejson.dumps({
        "form": form_html,
        "message": "Data saved."
    }, cls=LazyEncoder)

    return HttpResponse(result, mimetype='application/javascript')

Более того, после успешной отправки еще раз сохранения, я получаю необработанную форму: / Вот форма, которую я использую. Я думаю, что это может быть причиной моих проблем:

class EventForm(forms.ModelForm):   
    def __init__(self, *args, **kwargs):
        logging.debug("form - init")
        super(EventForm, self).__init__(*args, **kwargs)

    (...)

    def save(self, *args, **kwargs):   
        (...)

        logging.debug("form - save")
        post = super(EventForm, self).save(*args, **kwargs)
        post.save()

Так как в моем отладке я вижу, я думаю, что слишком много __init__'s

2010-10-28 23:35:08,210 DEBUG form - init
2010-10-28 23:35:34,065 DEBUG form - init
2010-10-28 23:35:34,068 DEBUG form - save
2010-10-28 23:35:34,073 DEBUG form - init
2010-10-28 23:35:34,258 DEBUG form - init
2010-10-28 23:35:34,262 DEBUG form - save
2010-10-28 23:35:34,270 DEBUG form - init

Может кто-нибудь помочь?


EDIT:

После удаления jquery-ui всё так же. Удаление livequery также не дает результатов.

1 Ответ

1 голос
/ 29 октября 2010

Почему вы создаете новую форму после сохранения исходной?

if form.is_valid():
    form.save()
    # what's the point of the next line?
    form = EventForm(instance=event)

Это почти наверняка является причиной вашего дублированного вызова __init__.Зачем ты это делаешь?У вас уже есть форма.

Кроме того, вы забыли остановить выполнение действия щелчка в вашем JS.

$("#event-data-save").livequery("click", function(e) {
    e.preventDefault();
    ...
})
...