2017-02-11 2 views
0

Скажем, я создаю модель MyModel экземпляра, который имеет FileField с помощью CreateView и связанных с ним MyModelCreateForm, и теперь я хочу, чтобы обновить его без загрузки того же аватара:Правильный способ 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-ish сделать это?

Нужно ли создать новую форму для 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 
Смежные вопросы