Использование FormWizard и сохранение данных форм между до завершения всего процесса? - PullRequest
1 голос
/ 06 декабря 2010

Я использую FormWizard для завершения набора операций в моем приложении, у меня есть две модели Employee и Person, класс Employee наследует Person, и все поля Person доступны для объекта Employee.

Теперь яя создаю набор форм с помощью FormWizard, я просто хотел знать это.Если пользователь начинает вводить данные в формы и заполняет до 2 форм из 4, а затем желает заполнить остальные формы.Так возможно, что данные двух заполненных им форм могут быть сохранены в базе данных.И в следующий раз, когда он придет, он может завершить операцию с 3-й формы.

Если кто-нибудь знает об этом, пожалуйста, помогите мне, это было бы очень полезно.Спасибо!

1 Ответ

2 голосов
/ 06 декабря 2010

то, что вы можете сделать, это каждый шаг, сохранить состояние формы для некоторого сериализованного объекта в db ForeignKeyed для пользователя.

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

Редактировать: кажется, что мастер форм сохраняет состояние в POST.нужно только сохранять постданные.

models.py:

class SavedForm(Model):
    user = ForeignKey(User)
    postdata = TextField()

views.py:

import pickle
class MyWizard(FormWizard):
    def done(self, request, form_list):
        SavedForm.objects.get(user=request.user).delete() # clear state!!
        return render_to_response('done.html',)

formwizard = MyWizard([Form1, Form2]) <- class name, not instance name

def formwizard_proxy(request, step):
    if not request.POST: #if first visit, get stored data
        try:
            prev_data = SavedForm.objects.get(user=request.user)
            request.POST = pickle.loads(prev_data.postdata)
        except:
            pass

    else: # otherwise save statet:
        try:
            data = SavedForm.objects.get(user=request.user)
        except:
            data = SavedForm(user=request.user)
        data.postdata=pickle.dumps(request.POST)
        data.save()

    return formwizard(request)

edit: изменен конструктор FormWizard

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...