Получите ранее вводимую информацию в Django FormWizard

Две вещи, которые значительно улучшат Ваши vi навыки:

  1. Практика, практика, практика
  2. Nethack
7
задан Eric Palakovich Carr 29 October 2009 в 23:01
поделиться

2 ответа

Сначала просто несколько общих советов - если вы не понимаете, как что-то использовать в Django, вытащите этот текстовый редактор и посмотрите на код. Это не всегда самый быстрый способ получить ответ, но я считаю, что в конечном итоге он приносит свои плоды.

Попробуйте добавить дополнительный_контекст на второй шаг, переопределив process_step в своем подклассе FormWizard. Вот комментарии из FormWizard (django 1.1):

 def process_step(self, request, form, step):
        """
        Hook for modifying the FormWizard's internal state, given a fully
        validated Form object. The Form is guaranteed to have clean, valid
        data.

        This method should *not* modify any of that data. Rather, it might want
        to set self.extra_context or dynamically alter self.form_list, based on
        previously submitted forms.

        Note that this method is called every time a page is rendered for *all*
        submitted steps.
        """
        pass

так что в вашем собственном классе ContactWizard что-то вроде (NB: я не запускал это):

class ContactWizard(FormWizard):
    def process_step(self,request,form,step):
        if step == 1:
            self.extra_context = {'whatever': form.whatever_you_want_from_the_form}
            return
        else:
            return
6
ответ дан 6 December 2019 в 19:40
поделиться

Не знаю, полезно ли еще публиковать это решение. Тем не менее. Необходимые вещи между различными формами (шагами), используемыми мастером, легко доступны, если дать мастеру дополнительный атрибут в виде dict. Например, так:

class WizardRegistration(FormWizard):
    def __init__(self, *args, **kwargs):
        super(WizardRegistration, self).__init__(*args, **kwargs)

        setattr(self, 'chosen', {})

Между шагами вы можете легко брать значения формы или модели и хранить их до тех пор, пока не достигнете метода done(). Сохранить значение формы

self.chosen['something_to_store'] = form.cleaned_data.get('a_form_value')

Или даже получить/изменить/сохранить модель:

object = Model.objects.get('some_query')

if self.chosen['object']:
    self.chosen['object'].string = 'Something stringy'
    self.chosen['object'].save()
3
ответ дан 6 December 2019 в 19:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: