如何根据模型字段选择窗体

2024-10-01 01:32:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个django模型来定义内容页,在这个模型中,我有一个字段可以选择是否希望某个表单出现在页面中。你知道吗

现在我做了第二张表格。我想根据ContentPage实例中填充的某个字段使用一个或另一个。你知道吗

更具体地说,我坚持这一部分:

class ViewContentPage(CreateView):
    model = ContentPage
    # What I'd like to do
    form_class = depending_on_some_ContentPage_field()

    # From here, overriden methods and stuff

问题是似乎无法访问kwargsrequest 在类级定义(为了根据从kwargs中提取的slug加载适当的ContentPage记录,然后从它的字段中确定要加载的窗体)

我一直在思考不同的方法来获得类似的结果,这项研究让我发现了这个问题:Can I call a view from within another view?。我认为“将FormViews作为ViewContentPage中的子视图”将为在模板级别呈现的表单提供一个完全独立的视图。。。你知道吗

类似于上面的pseudo\u代码中公开的东西可以用其他方法实现吗?你知道吗

编辑

正如@Alasdair建议的,我重写了视图中的get_form_class()方法。它看起来像是做了我想要的,但一个小小的失败,回溯是完全在Django本身站在我的方式。你知道吗

我使用Django v1.8.3,引发异常的点位于django.core.handlers.base.py第132行(回溯中的第一行)。例外情况是:

TypeError: 'instance' is an invalid keyword argument for this function

这个异常的原因似乎在django/db/models/base.py第480行(回溯的最后一行)。不知怎么的,这个班(django.db.型号.基本模型)正在运行,即使self = Error in formatting: RelatedObjectDoesNotExist: MyModelForForm2 has no page.真的很混乱。你知道吗

这并不是我第一次看到回溯在源代码的任何地方都不会停止的错误,即使如此,更正源代码也会消除错误。然而,我仍然停留在如何在不修改Django本身的情况下纠正这个问题上。你知道吗


Tags: django方法py模型formview视图表单
1条回答
网友
1楼 · 发布于 2024-10-01 01:32:36

您可以重写^{}方法。在它内部,您可以访问self.request,并从self.kwargs获取slug。你知道吗

class ViewContentPage(CreateView):
    model = ContentPage

    def get form_class(self):
        # return correct class based on self.kwargs and self.request

相关问题 更多 >