Как добавить форму Django в блок трясогузки

Я хочу добавить форму в блок трясогузки. Форма представляет собой простой раскрывающийся список с кнопкой отправки.

class ExampleForm(forms.Form):
    example = forms.ModelChoiceField(queryset=Example.objects.all())

Тогда блок трясогузки представляет собой простую таблицу, сгенерированную с помощью get_context().

# this is basically the view rendering
def get_context(self, request, **kwargs):
    context = super().get_context(request, **kwargs)
    # do some queries and populate tables in template.
    context['example_data'] = SomeObject.objects.all()
    # here is where I want to add the form.
    this_form = SomeForm()
    context['this_form'] = this_form
    return context

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


person goosefrumps    schedule 26.09.2017    source источник
comment
Вы хотите добавить «форму, которая отправляется» в блоке Streamfield в интерфейсе редактирования? Или вы хотели выбрать существующую форму из Streamfield и представить ее как форму для отправки в представлении (живой странице)?   -  person LB Ben Johnston    schedule 13.11.2017


Ответы (1)


Ближе всего к представлению для практических целей serve() метод. Там вы можете обрабатывать if request.method == "POST": и так далее. Возможно:

def serve(self, request):

    if request.method == 'POST':
        form = MyFormClass(request.POST)
        if form.is_valid():
            # process the form here...
            return HttpResponseRedirect(self.reverse_subpage('thanks'))

    else:
        form = MyFormClass()

    context = self.get_context(request)
    context['form'] = form
    return render(
        request,
        self.get_template(request),
        context
    )

В качестве альтернативы, для типа страницы, которая записывает простые отправки форм и предоставляет редакторам пользовательский интерфейс для внесения поправок в формы, Wagtail уже имеет Конструктор форм, вспомогательный модуль. Приведенный выше код в основном взято оттуда .

Также, возможно, имеет значение RoutablePageMixin< /a>, что позволяет вам иметь несколько «представлений» для модели страницы с разными URL-адресами. Я использовал это в приведенном выше коде с перенаправлением на подстраницу «спасибо».

person nimasmi    schedule 28.09.2017
comment
Я только что заметил, что вы хотели добавить его в «блок», так что я думаю, вы говорите о блоках Streamfield. Это исключает использование конструктора форм. - person nimasmi; 02.10.2017