【问题标题】:warning after overwriting get_form覆盖 get_form 后的警告
【发布时间】:2016-02-16 10:56:40
【问题描述】:

在我的基于类的更新/创建视图中,我添加了一些类:

class IndexUpdateView(UpdateView):
    fields = '__all__'
    model = Index
    template_name = 'index_form.html'

    def get_success_url(self):
        return reverse('IndexList')

    def get_form(self, form_class):
        form = super(IndexUpdateView, self).get_form(form_class)
        form.fields['year'].widget.attrs.update({"class": "form-control tosp"})
        form.fields['index'].widget.attrs.update({"class": "form-control tosp"})
        return form

添加“get_form”后,我收到了警告:

RemovedInDjango110Warning:Index.views.IndexCreateView.get_form 方法必须为其form_class 参数定义一个默认值。

如何定义默认值?

【问题讨论】:

    标签: django django-forms django-views


    【解决方案1】:

    form_class 参数自 Django 1.8 (release notes) 以来一直是可选的。警告告诉您必须为 form_class 指定默认参数,例如

    def get_form(self, form_class=MyFormClass):
        ...
    

    如果您查看default implementation,它使用None 作为默认值,并在未指定时调用self.get_form_class()。由于您已经在 get_form 方法中调用了 super(),因此您应该也可以使用 None 作为默认值。

    def get_form(self, form_class=None):
        form = super(IndexUpdateView, self).get_form(form_class)
        ...
    

    在您的特定情况下,您可以定义一个模型表单来更改 __init__ 方法中的小部件属性。这样您就根本不必覆盖get_form

    class IndexForm(forms.ModelForm):
        def __init__(self, *args, **kwargs):
            super(IndexForm, self).__init__(*args, **kwargs)
            self.fields['year'].widget.attrs.update({"class": "form-control tosp"})
            self.fields['index'].widget.attrs.update({"class": "form-control tosp"})
    
    class IndexUpdateView(UpdateView):
        fields = '__all__'
        model = Index
        form_class = IndexForm
        template_name = 'index_form.html'
    
        def get_success_url(self):
            return reverse('IndexList')
    

    【讨论】:

      【解决方案2】:

      将属性form_class 添加到您的类中。

      class IndexCreateView(UpdateView):
          form_class = MyFormClass
      

      【讨论】:

      • 目前我没有 FormClass。但我想我会添加一个:) 谢谢
      • 这只会在您删除 get_form 方法并改为设置 form_class 属性时停止警告。如果您保留get_form 方法,那么您必须按照我的回答设置默认值。
      • 无论如何,您的回答很有帮助——我没有注意到创建模型表单类可能比更改get_form 更好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      • 1970-01-01
      • 1970-01-01
      • 2016-06-29
      相关资源
      最近更新 更多