2017-02-11 16 views
0

比方說,我創建具有使用CreateView和相關MyModelCreateForm一個FileField的模型MyModel實例,現在我想不載同樣的頭像圖片進行更新:正確的Django的方式來創建CreateView所需的表單字段,但在UpdateView上可選嗎?

class MyModel(models.Model): 
    name = models.CharField() 
    avatar = models.ImageField() 

class MyModelCreateForm(forms.ModeForm): 
    class Meta: 
     model = MyModel 
     exclude = None 

class MyModelCreate(CreateView): 
    model = MyModel 
    form_class = MyModelCreateForm 

class MyModelCreate(UpdateView): 
    model = MyModel 
    form_class = ? 

在CreateView的的形成圖像是強制性的。如果我想在更新字段中將其設置爲可選,那麼Django最常用的方法是什麼?

是否需要爲UpdateView創建一個新窗體,該窗體從MyModelCreateForm繼承,但是會覆蓋ImageField required屬性?還是有更多的「電池包括」的方式?

+0

我想你新的一種新的形式或形式有一個參數來控制它的邏輯:MyModelCreateForm(更新= TRUE) – mtt2p

回答

0

我認爲不,但你可以在其中實現!

class ModelXForm(ModelForm): 

class Meta: 
    model = x 
    fields = ['image','name'] 

    def __init__(self,update, survey, **kwargs): 
     super(FBRequestForm, self).__init__(**kwargs) 
     if not update: 
      self.fields['image'].widget.attrs['readonly'] = True 
      self.fields['image'].widget = forms.HiddenInput() 
0

這裏的解決方案,使所需字段:

class Foo(CreateView): 

    model = Fiz 
    fields = ('bar',) 

    def get_form(self, form_class=None): 
     form = super(Foo, self).get_form(form_class) 
     form.fields['bar'].required = True 
     return form 
相關問題