хрустящие формы bootstrap 3 отправить проблемы

Это действительно поставило меня в тупик. Я могу писать формы OK в django, но хочу использовать хрустящие формы bootstrap3. Я могу получить формы для отображения, используя этот код формы:

класс NewGuestForm (forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(NewGuestForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper(self)
        self.helper.form_id = 'id-newGuestForm'
        self.helper.form_class = 'form-horizontal'
        self.helper.label_class = 'col-lg-2'
        self.helper.field_class = 'col-lg-6'
        self.helper.form_method = 'post'
        self.helper.form_action = 'guest-list'
        self.helper.layout = Layout(
            Fieldset (
                'New Guest',
                'first_name',
                'last_name',
                'num_child',
                'landline',
                'mobile',
                'email'
                ),
            FormActions(
                Submit('save', 'Save changes',css_class='btn-primary'),
                Button('cancel', 'Cancel')
            )
        )

    class Meta:
        model = Guest

класс BookingForm (forms.Form): класс Meta: модель = бронирование

    def __init__(self, *args, **kwargs):
        self.helper = FormHelper()
        self.helper.form_method = 'POST'
        self.helper.form_id = 'add-booking'
        self.helper.form_class = 'form-horizontal'
        self.helper.label_class = 'col-lg-2'
        self.helper.field_class = 'col-lg-6'
        self.helper.layout = Layout(
            Fieldset(
                '',
                'guest',
                'guest_status',
                'start_date',
                'end_date',
                'dep_recd',
                'bkd_child',
                'bkd_adult',
                'bal_recd',
                'sec_recd',
                'keys_sent',
                'sec_retn',
                'notes'
                ),
        FormActions(
            Submit('submit', "Save changes"),
            Submit('cancel', "Cancel"),
            )       
        )

        super(BookingForm, self).__init__(*args, **kwargs)

Это отображает форму в порядке, но когда я нажимаю «отправить», браузер становится белым. Возврат (form_action) правильно отображается в адресной строке, но не загружается. Данные не записываются в базу данных. Форма отображается только с нужными мне полями.

Моя точка зрения такова:

class NewGuestView(CreateView):
    model = Guest
    template_name = 'new_guest.html'
    form_class = NewGuestForm

Если я изменю «form_class» на «form», форма будет отображаться со всеми полями и игнорировать инструкции столбца начальной загрузки. Также не отображаются кнопки «отправить» и «отменить».

Должно быть, я делаю что-то не так, но не могу понять, что именно. Любые предложения с благодарностью принимаются.


person sidestrand    schedule 09.02.2014    source источник


Ответы (2)


Это, вероятно, немного поздно для вас, но сегодня я впервые посмотрел на django-crispy-forms и столкнулся с той же проблемой, что и вы. Если я определил form_action, то при отправке формы браузер перенаправляется на правильный URL-адрес, но страница пуста - даже при обновлении. Это также происходит независимо от того, действительна форма или нет, поэтому очевидно, что это довольно фундаментальная проблема, и должно быть что-то, что мы оба делаем неправильно.

Я обошел это, используя атрибут success_url представления. Итак, вы могли бы попробовать:

from django.core.urlresolvers import reverse_lazy

class NewGuestView(CreateView):
    ...
    success_url = reverse_lazy("guest-list")

Что касается кнопок, я еще не определился с макетом и использовал такой подход:

    self.helper.add_input(Submit('submit', 'Submit'))
    self.helper.add_input(Button('cancel', 'Cancel'))

Хотя стоит отметить, что на данном этапе кнопка «Отмена» на самом деле ничего не делает, мне нужно будет изучить это подробнее.

Вам удалось заставить это работать или найти другой способ?

Обновление:

Перенаправление завершается с ошибкой 405 Method Not Allowed. Я попытался определить метод post(), на мой взгляд, в соответствии с this SO вопрос, и это решает ошибку HTTP, но не обрабатывает данные (новая запись не сохраняется и ошибки проверки не обнаруживаются). Поэтому я придерживаюсь метода success_url, пока не узнаю, что я делаю неправильно.

person danj1974    schedule 28.08.2014
comment
Я пытался использовать «обратный ленивый», но не менялся. Я прочитал документацию crispy_forms так, что «FormAction» должен включать «form_action =» без моего отдельного указания, но, похоже, этого не происходит. Исходная страница для моего html не имеет ожидаемого ‹div class=form-actions›, но имеет метод = post. - person sidestrand; 19.09.2014

Решено сейчас. Я не осознавал, что мне нужно добавить поля в класс Meta, а также перечислить их в Layout. я добавил следующее

    class Meta:
    model = Guest
    fields = ['first_name', 'last_name', 'email', 'landline', 'mobile']

Теперь форма сохраняется ОК.

person sidestrand    schedule 21.09.2014
comment
Спасибо!! это сэкономило мне часы разочарования!! - person Bedros; 21.03.2015