2016-02-16 28 views
5

Trong Cập nhật ClassBased tôi/Tạo xem tôi đã thêm một số lớp học:cảnh báo sau khi ghi đè get_form

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 

Sau khi thêm "get_form" Tôi đã cảnh báo:

RemovedInDjango110Warning: Index.views.IndexCreateView.get_form phương pháp phải xác định một giá trị mặc định cho đối số form_class của nó.

Cách xác định giá trị mặc định?

Trả lời

1

Thêm thuộc tính form_class vào lớp học của bạn.

class IndexCreateView(UpdateView): 
    form_class = MyFormClass 
+0

tại thời điểm này tôi không có FormClass. Nhưng tôi nghĩ rằng tôi sẽ thêm một :) cảm ơn – spitzbuaamy

+1

Điều này sẽ chỉ dừng cảnh báo nếu bạn loại bỏ phương thức 'get_form' và đặt thuộc tính' form_class' thay thế. Nếu bạn giữ phương thức 'get_form', thì bạn phải đặt mặc định như trong câu trả lời của tôi. – Alasdair

+0

Câu trả lời của bạn là đúng, @Alasdair –

10

Đối số form_class đã được chọn vì Django 1,8 (release notes). Cảnh báo cho bạn biết rằng bạn phải chỉ định đối số mặc định cho form_class, ví dụ:

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

Nếu bạn nhìn vào default implementation, nó sử dụng None như là mặc định, và kêu gọi self.get_form_class() khi nó không được chỉ định. Vì bạn đã gọi super() trong phương thức get_form của mình, bạn sẽ có thể sử dụng None làm mặc định.

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

Trong trường hợp cụ thể của bạn, bạn có thể xác định mẫu biểu mẫu thay đổi công cụ tiện ích theo phương pháp __init__. Sau đó, bạn sẽ không phải ghi đè lên số 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') 
Các vấn đề liên quan