覆盖get_form后发出警告

spi*_*amy 5 django django-forms django-views

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

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
Run Code Online (Sandbox Code Playgroud)

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

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

如何定义默认值?

Ala*_*air 10

form_class自Django 1.8(发行说明)以来,该参数是可选的.警告告诉您必须为form_class指定默认参数,例如

def get_form(self, form_class=MyFormClass):
    ...
Run Code Online (Sandbox Code Playgroud)

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

def get_form(self, form_class=None):
    form = super(IndexUpdateView, self).get_form(form_class)
    ...
Run Code Online (Sandbox Code Playgroud)

在特定情况下,您可以定义一个模型表单来更改方法中的小部件attrs __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')
Run Code Online (Sandbox Code Playgroud)


Hen*_*son 1

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

class IndexCreateView(UpdateView):
    form_class = MyFormClass
Run Code Online (Sandbox Code Playgroud)