Общие виды Django + диалог JQueryUI + Ajax - PullRequest
1 голос
/ 25 февраля 2012

Кто-нибудь может обеспечить быстрый проход?

У меня есть диалог JQueryUI, который загружается через ajax с формой django.

JQuery

$("#project_add").on(
    "click", {url: "/projects/project_create"}, open_dialog
);

function open_dialog(event) {
    //create the div that will hold the dialog box
    var projectDialog = $('#project_dialog');
    if ($('#project_dialog').length == 0) {
        projectDialog = $('<div id="project_dialog"></div>').appendTo('body');
    }

    // load the passed url into the dialog
    projectDialog.load(event.data.url);

    // create the dialog box and display it
    projectDialog.dialog({
        title: "Create Project",
        position: ['center', 'top'],
        closeOnEscape: true,
        close: function() {projectDialog.dialog("destroy");}
    });
}

Джанго

class CreateProject(CreateView):
template_name = "projects/project_create.html"
form_class = ProjectCreateForm

def form_valid(self, form):
    self.object = form.save()
    return HttpResponse()

шаблон django

<form action="project_create/" method="post">
{{ form.as_p }}
<input type="submit" value="Save" id="dialog-save">
</form>

Все, что я хочу сделать, - это сохранить все действия в диалоговом окне, т. Е. Недействительные записи формы будут иметь сообщения проверки в диалоговом окне. Если форма верна, я хочу, чтобы диалог закрылся и вернулся на страницу, которая вызвала диалог. Я возился с переопределением form_valid, чтобы попытаться избежать необходимости перенаправления, но безрезультатно. Я в конечном итоге на пустой странице с URL-адресом, равным URL-адресу, переданному в атрибуте действия формы. Я хотел бы избежать добавления слушателя в jquery на кнопку отправки для обработки проверки формы в js. Я видел несколько постов, в которых предлагается выполнить проверку на стороне js, а затем передать данные в django для сохранения. Я хотел бы сделать проверку и сохранение с Django.

Если бы я мог понять, как это сделать, я бы мог добавить слушателя для уничтожения диалога при успешной отправке формы, но я хочу использовать django для проверки и jquery только для презентации. Любые советы?

1 Ответ

0 голосов
/ 26 июня 2013

Вы должны отправить форму через AJAX, а затем заменить содержимое диалога на HTTP-ответ. Например:

$(document).on('click', '#dialog-save', function(event) {
    event.preventDefault();
    var $form = $(this).closest('form');
    $.ajax({
        url: $form.prop('action'),
        type: 'POST',
        data: $form.serialize()
    }).done(function (data) {
        $form.replaceWith(data);
    });
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...