django - 返回带有当前 FormWizard 数据的新 FormWizard

标签 django python-3.x django-forms django-formwizard

目前,我有一个基本的 FormWizard,其步骤使用 ModelForm 派生表单。当用户完成后,它将保存到数据库。我不想将它们重定向回空的 FormWizard,而是渲染 FormWizard 的新实例,从第一步开始,但使用他们在初始表单中输入的信息预先填充特定字段。

以下是基本功能:

class CustomWizardView(SessionWizardView):
    file_storage = FileSystemStorage(location=os.path.join(settings.MEDIA_ROOT, 'uploads'))

    instance = None

    def get_form_instance(self, step):
        if not self.instance:
            self.instance = Post()
        return self.instance

    def done(self, form_list, **kwargs):
        self.instance.user = self.request.user
        self.instance.save()
        return HttpResponseRedirect('/session-form')

在我意识到我的表单需要多大并且需要 FormWizard 之前,我是这样做的:

class PostFormView(TemplateView):
    template_name = 'form/form.html'

    def get(self, request):
        form = TestPostForm()
        return render(request, self.template_name, {'form': form})

    def post(self, request):
        form = TestPostForm(request.POST, request.FILES)

        building_floor_data = 0
        department_data = ''

        if form.is_valid():
            post = form.save(commit=False)
            post.user = request.user
            building_floor_data = form.cleaned_data['building_floor']
            department_data = form.cleaned_data['department']
            post.save()
            # return redirect('form')

        form = TestPostForm()

        form.fields['building_floor'].initial = building_floor_data
        form.fields['department'].initial = department_data

        return render(request, self.template_name, {'form': form})

我对 Django 非常陌生,所以这可能是一个非常明显的飞跃。我只是不明白。

最佳答案

终于弄清楚了。您必须覆盖 SessionWizardView 的 get_form_initial 函数。您正在寻找构建一个字典,初始字典,里面应该是字段名称和所需值的键值对。对我来说,检索值的方法是使用过滤查询获取用户最后在数据库中输入的值。下面的例子:

def get_form_initial(self, step):
    initial = {}
    user = self.request.user.username
    if step == '0':
        main_db_query = Post.objects.filter(user__username__exact=user).last()
        if main_db_query:
            initial = {'site': main_db_query.site,
                       'floor': main_db_query.floor,
                       'room_number': main_db_query.room_number,
                       'department': main_db_query.department}
    return self.initial_dict.get(step, initial)

关于django - 返回带有当前 FormWizard 数据的新 FormWizard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50652349/

相关文章:

Django:在表单字段级别更改 DOM id

python - 如何让pandas显示每个数据行

python - 如何使用 Moviepy 制作空白视频

Django ModelForm-如何使生成的表单不可编辑

python - Django - 使用特殊表达式的 RegexValidator

python - 仅打印字符串中的元音字母

python - 类型错误 : __init__() got an unexpected keyword argument 'current_app' Django

django - 在同一台服务器上运行多个 Django Celery 网站

python - 在 Django 网站提交表单后,如何执行繁重的后台 python 代码?

python - 使用 ManyToManyFields 复制 django 对象