python - 如何将两个 View 和两个表单合并到一个模板中?

标签 python django

我有两个独立的基于类的 View 并希望保留它们的功能,并让两个 CBV 指向同一个模板(我试图将两个单独的表单合并到一个页面中)。

更具体地说,我正在尝试子类化/合并 this email view ,还有这个 password change view ,这样我就可以让它们指向同一个模板,因为我最终希望两个表单都在同一页面上。

我试图通过将它们子类化为我自己的 View 来做到这一点:

class MyEmailUpdateView(LoginRequiredMixin, EmailView):
    template_name = 'account/account_settings'
    success_url = reverse_lazy('settings')

    def form_valid(self, form):
        return super(SettingsUpdateView, self).form_valid(form)

class MyPasswordUpdateView(LoginRequiredMixin, PasswordChangeView):
    template_name = 'account/account_settings'
    success_url = reverse_lazy('settings')

    def form_valid(self, form):
        return super(SettingsUpdateView, self).form_valid(form)  

但我现在发现由于错误,一个接一个,似乎父类中的任何内容实际上都没有转移到我的自定义类中,除非我手动将其引入(success_url、方法等)。即便如此,我正在子类化的原始类中的代码指向别处。
那么,在组合这两个 View 时,我是否需要将所有原始代码复制到我的自定义子类 View 中?

这是完成它的正确方法吗?我怎样才能将这两种观点结合起来?我最终正在寻找一种方法,将它们的两种形式都放在我自己的应用程序的单个页面上。是否有更简单的方法可以使用 library's provided templates 来完成此操作? ?

最佳答案

您可以使用 Django Multi Form View在 View 中组合多种形式

安装后你可以像下面这样使用它:

class MultiFView(MultiFormView):
    form_classes = {
        'email_form' : AddEmailForm,
        'change_password_form' : ChangePasswordForm
    }
    record_id = None
    template_name = 'web/multi.html'

    def forms_valid(self, forms):
        email = forms['email_form'].save(commit=False)
        email.save()
        return super(MultiFView, self).forms_valid(forms)

在模板中:

{{ forms.email_form.as_p }}
{{ forms.change_password_form.as_p }}

关于python - 如何将两个 View 和两个表单合并到一个模板中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47789661/

相关文章:

jquery - Django 依赖选择

python - Django,如何生成没有模型的管理面板?

python - 如何使用 AJAX 或类似的东西在 Django 中使用 Python 脚本?

python - django请求远程数据库

python - django 如何通过用户状态更改 __str__ 标签?

javascript - 从 Nest api 获取数据不再起作用

python - 使用外部 Python 包的 U-SQL

python - 如何将 map 列表转换为 python 中的集合 map ?

django 模块导入错误 - python 2.7 与 python 3.4

python - 致命的 Python 错误 : PyImport_GetModuleDict: no module dictionary