Я пытаюсь создать мастер для импорта нескольких моделей в Django с использованием JSON. Я хочу иметь возможность:
- перейдите по URL-адресу, например
entries/import/
, который отобразит текстовое поле - где я могу вставить некоторые записи JSON и нажать «Отправить»
- который затем приведет меня к шагу 2 мастера, где мне будет представлен список типовых форм
- где после проверки/изменения некоторых данных я могу нажать «Отправить» и сохранить все записи
Похоже, я хочу использовать мастер форм в сочетании с FormSet. У меня выполнены шаги 1 и 2, но я не могу понять, как представить все модели в виде форм на шаге 2 мастера.
Я наткнулся на эту ссылку, которая показывает, где Я мог бы преобразовать JSON в FormSet, но пока не смог заставить его работать. Ниже приведено то, что я считаю соответствующим кодом. Можете ли вы помочь мне понять, как передать набор форм на шаг 2?
class EntryForm(forms.ModelForm):
class Meta:
model = Entry
fields = ['text', 'tags']
class ImportForm(forms.Form):
json = forms.CharField(widget=forms.Textarea, label='JSON')
class ImportSelectionForm(forms.Form):
entryFormSet = formset_factory(EntryForm)
FORMS = (
("step1", ImportForm),
("step2", ImportSelectionForm),
)
TEMPLATES = {
"step1": "entries/json_form.html",
"step2": "entries/entry_import_form.html",
}
class ImportWizard(SessionWizardView):
def get_template_names(self):
return [TEMPLATES[self.steps.current]]
def get_form_initial(self, step):
current_step = self.storage.current_step
if current_step == 'step2':
# Not getting here for some reason after submitting step1
prev_data = self.storage.get_step_data('step1')
json = prev_data.get('step1-json', '')
models = serializers.deserialize("json", json)
EntryFormSet = formset_factory(EntryForm)
formset = EntryFormSet(self.request.POST, self.request.FILES)
return self.initial_dict.get(step, {'formset': formset})
return self.initial_dict.get(step, {})
def done(self, form_list, **kwargs):
return HttpResponseRedirect(revierse_lazy('entries:index'))