2015-08-27 7 views
3

У меня есть имя формы django "SampleForm". Что я использую для ввода данных от пользователя. Теперь я хочу использовать ту же форму, чтобы показывать эту информацию пользователю на другой странице. Но форма редактируема. Я хочу сделать форму только для чтения. Есть ли способ сделать целую форму Readonly?Как создать форму модели Django Readonly?

ответ

6

псевдо-код (не проверено):

class ReadOnlyFormMixin(ModelForm) 
    def __init__(self, *args, **kwargs): 
     super(ReadOnlyFormMixin, self).__init__(*args, **kwargs) 
     for key in self.fields.keys(): 
      self.fields[key].widget.attrs['readonly'] = True 

    def save(self, *args, **kwargs): 
     # do not do anything 
     pass 

class SampleReadOnlyForm(ReadOnlyFormMixin, SampleForm): 
    pass 
+0

Thats a good as as same frm был использован для редактирования информации. –

+0

Если вы используете Django> = 1.9, вы можете использовать self.fields [key] .disabled = True https://docs.djangoproject.com/en/1.9/ref/forms/fields/#disabled –

0
class SampleForm(ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(SampleForm, self).__init__(*args, **kwargs) 
     instance = getattr(self, 'instance', None) 
     if instance and instance.pk: 
      for field in self.fields.keys(): 
       self.fields[field].widget.attrs['readonly'] = True 

Только это должно сделать всю форму readonly всякий раз, когда экземпляр доступен для формы.

+1

Это не помешало бы POST хаков Тхо так что будьте осторожны. –

0

Рабочий код

class ReadOnlySampleForm(SampleForm): 
def __init__(self, *args, **kwargs): 
    super(SampleForm, self).__init__(*args, **kwargs) 
    for key in self.fields.keys(): 
     self.fields[key].widget.attrs['readonly'] = True 
Смежные вопросы