2016-05-30 2 views
0

同じフォームの2つのテンプレートがありますが、1ページには「写真」フィールドが表示されません。問題は、私のフォームがFormHelperのクリスピーフォームで記述されていることです。 「写真」フィールドとFormActions(ボタン)を非表示/除外/削除するにはどうすればよいですか?前もって感謝します。Djangoフォームでクリスピーフォームで表示されたフィールドを除外/非表示

views.py:

def user_data_view(request): 
     model_values = UserData.objects.order_by('last_name')[0] 
     form = User_data_form(initial={ 
      'name':model_values.name, 
      'last_name':model_values.last_name, 
      'birth_date':model_values.birth_date, 
      'bio':model_values.bio, 
      'email':model_values.email, 
      'jabber':model_values.jabber, 
      'skype':model_values.skype, 
      }) 
     context = { 
      'form':form, 
     } 
     return render(request, 'home.html', context) 

forms.py

class User_data_form(forms.ModelForm): 
class Meta: 
    model = UserData 
    fields = ['name', 'last_name', 'birth_date', 'bio', 'email', 'jabber','skype', 'photo'] 

def __init__(self, *args, **kwargs): 
    super(User_data_form, self).__init__(*args, **kwargs) 

    self.helper = FormHelper() 

    self.helper.form_id = 'data-fields' 
    self.helper.form_method = 'POST' 
    self.helper.form_tag = True 
    self.helper.layout = Layout(
     Div(
      Div('name', 'last_name', 'birth_date','email', 'jabber','skype','bio', css_class='col-md-6'), 
      Div('photo', css_class='col-md-6'), 
      HTML('<img src="{{ url_photo }}" id="photo-preview" class="pull-right form-inline">'), 

     ), 
     FormActions(
     Submit('save_changes', 'Save', css_class='btn btn-success'), 

     ) 

    ) 

template.html

<form id="form" action="">{% csrf_token %} 
{% crispy form %} 
</form> 

更新:

は、私はそうのようなforms.pyコード書き直し:

class FormMixin(forms.ModelForm): 
class Meta: 
    model = UserData 
    fields = ['name', 'last_name', 'birth_date', 'bio', 'email', 'jabber','skype', 'photo'] 

def __init__(self, *args, **kwargs): 
    super(FormMixin, self).__init__(*args, **kwargs) 

    self.helper = FormHelper() 

    self.helper.form_id = 'data-fields' 
    self.helper.form_method = 'POST' 
    self.helper.form_tag = True 
    self.helper.layout = Layout(
     Div(
      Div('name', 'last_name', 'birth_date','email', 'jabber','skype','bio', css_class='col-md-6'), 
      Div('photo', css_class='col-md-6'), 
      HTML('<img src="{{ url_photo }}" id="photo-preview" class="pull-right form-inline">'), 
     ), 
     FormActions() 
     ) 

class User_data_form(FormMixin): 

def __init__(self, *args, **kwargs): 
    super(User_data_form, self).__init__(*args, **kwargs) 
    self.helper = FormHelper() 
    self.helper.layout = Layout(
     Div(), 
     FormActions(
     Submit('save_changes', 'Save', css_class='btn btn-success'), 
     ) 
    ) 

class InitialForm(FormMixin): 
class Meta: 
    model = UserData 
    exclude = ['photo'] 
def __init__(self, *args, **kwargs): 
    super(InitialForm, self).__init__(*args, **kwargs) 

をしかし、今、私は2番目のテンプレートでフォームの上部にあるボタンを提出しています。フォームの下にボタンを配置するコードを再アセンブリする方法

+2

最も簡単な方法は、新しいを定義することですフォームクラス。既存のフォームクラスをサブクラス化し、 'fields'から1つのフィールドを削除するだけです。 – solarissmoke

+0

あなたに続いて私が作っ: 'クラスInitialForm(User_data_form): モデルは= UserDataを はデフ__init __(自己、* argsを、** kwargsから) [ '写真'] =除外: スーパー(InitialForm、自己).__のinit __を( * args、** kwargs) ' フィールドはまだ表示されています... – Andriy

+0

これはフィールド(私は以前のコメントでクラスMetaを逃しました)にも作用します。 – Andriy

答えて

0

ない最高のdesicionが、あなたは写真を非表示にするテンプレートで、それにもかかわらず...

、ちょうどそのようSMTHを挿入します。

<script> document.onLoad(function(){document.getElementById('form').getElementsByTagName('img')[0].style = 'display:none'; 
}) </script> 
関連する問題