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番目のテンプレートでフォームの上部にあるボタンを提出しています。フォームの下にボタンを配置するコードを再アセンブリする方法
最も簡単な方法は、新しいを定義することですフォームクラス。既存のフォームクラスをサブクラス化し、 'fields'から1つのフィールドを削除するだけです。 – solarissmoke
あなたに続いて私が作っ: 'クラスInitialForm(User_data_form): モデルは= UserDataを はデフ__init __(自己、* argsを、** kwargsから) [ '写真'] =除外: スーパー(InitialForm、自己).__のinit __を( * args、** kwargs) ' フィールドはまだ表示されています... – Andriy
これはフィールド(私は以前のコメントでクラスMetaを逃しました)にも作用します。 – Andriy