Я думаю, что есть несколько подходов, в зависимости от того, насколько сложны данные, которые вы должны передать.
Вы можете следовать инструкциям здесь: https://docs.djangoproject.com/en/dev/ref/contrib/formtools/form-wizard/#providing-initial-data-for-the-forms
и создайте исходный словарь, который вы передаете представлению в urls.py, примерно так:
>>> initial = {
... '0': {'subject': 'Hello', 'sender': 'user@example.com'},
... '1': {'message': 'Hi there!'}
... }
>>> wiz = ContactWizard.as_view([ContactForm1, ContactForm2], initial_dict=initial)
Ваш другой вариант, и он более сложный, но позволит вам иметь немного больше логики, это переопределить get_initkwargs и поместить туда логику (см. Код Django: https://github.com/django/django/blob/master/django/contrib/formtools/wizard/views.py).
Наконец, если вам нужно предоставить объект, основанный на вводе предыдущей формы, то это будет довольно сложно, потому что get_initkwargs - это метод класса, и начальные словари необходимо передавать при запуске мастера. Но, вероятно, вы можете сделать это, переопределив get_form_kwargs:
def get_form_kwargs(self, step=None):
kwargs = {}
if step != '0':
your_field = self.get_cleaned_data_for_step('0')['your_field']
# logic for getting object based on field goes here
kwargs.update({'object': object,})
return kwargs
Тогда вы можете использовать метод init формы, чтобы установить начальные значения, основанные на объекте, который вы передали в kwargs. Я часто использую последний кусок кода, но на самом деле не использовал предыдущие.