Django: многоэтапные формы одной модели

Я пытаюсь создать многоэтапные формы из одной модели Django с 9 полями. Формы проверяются на каждом этапе и после последнего этапа сохраняются в базе данных.

Быстрое решение, которое я могу придумать рядом с Django formWizard, это

У меня есть такая модель django:

class Question(models.Model):
    name = models.CharField(max_length=100)
    Description = models.TextField()
    filter = models.CharField(max_length=20)

Я разделил форму на три

class Filter(forms.ModelForm):
    class Meta:
        model = Question
        exclude = ('filter',)


class Name(forms.ModelForm):
    class Meta:
        model = Question
        fields = ('name',)


class Descripton(forms.ModelForm):
    class Meta:
        model = Question
        fields = ('description',)

Напишите urls и интегрируйте с views для разных шагов. Вопрос в том, как я могу проверить и сохранить данные многоэтапных форм на последнем этапе?


person MysticCodes    schedule 07.07.2014    source источник


Ответы (1)


Каков ваш вариант использования для разделения этого на три этапа, а не на один?

Кроме того, простым решением было бы:

  1. Очищайте/проверяйте частичные данные после каждой отправки.
  2. Отправьте частичные данные обратно в скрытые поля в свой шаблон для последующих шагов (возможно, имя может наследоваться или быть инициализировано с помощью фильтра, то же самое с описанием, принимающим имя).
  3. Затем при окончательной отправке у вас будут все предыдущие данные (некоторые в скрытых полях), чтобы вы могли сохранить их все в своей базе данных.
person Michael Cheng    schedule 07.07.2014
comment
Что ж, случай разделения относится к части UX во внешнем интерфейсе. - person MysticCodes; 07.07.2014
comment
В таком случае является ли ajax приемлемым решением? Вы можете использовать одну форму модели и вручную разделить поля в пользовательском интерфейсе. Затем для каждого раздела есть кнопка отправки, которая отправляет частичные данные формы обратно через запрос ajax для очистки. Если вы получите ответ «ОК», вы можете переместить их в следующий раздел формы. В противном случае отобразите ошибки. Ваша последняя кнопка отправки будет фактическим POST на сервер, чтобы вы могли сделать последнюю очистку и сохранить все сразу. - person Michael Cheng; 08.07.2014