RegexField
일반 텍스트 입력 필드와 매우 유사한 Django 양식이 있습니다.
내 견해로는 특정 조건에서 사용자에게 숨기고 가능한 한 양식을 비슷하게 유지하려고합니다. 이 필드를 필드로 바꾸는 가장 좋은 방법은 무엇입니까 HiddenInput
?
필드에서 속성을 설정할 수 있다는 것을 알고 있습니다.
form['fieldname'].field.widget.attr['readonly'] = 'readonly'
그리고 원하는 초기 값을 다음과 같이 설정할 수 있습니다.
form.initial['fieldname'] = 'mydesiredvalue'
그러나 위젯의 형태는 바뀌지 않습니다.
이 필드를 <input type="hidden">
필드 로 만드는 가장 좋은 방법은 무엇입니까?
답변
사용자 정의 템플리트 및보기가있는 경우 필드를 제외 {{ modelform.instance.field }}
하고 값을 얻는 데 사용할 수 있습니다.
또한보기에서 사용하는 것이 좋습니다.
form.fields['field_name'].widget = forms.HiddenInput()
그러나 그것이 포스트의 저장 방법을 보호할지는 확실하지 않습니다.
도움이 되길 바랍니다.
답변
이것은 또한 유용 할 수 있습니다 : {{ form.field.as_hidden }}
답변
나를 위해 일한 옵션은 원래 형식으로 필드를 다음과 같이 정의하십시오.
forms.CharField(widget = forms.HiddenInput(), required = False)
그런 다음 새 클래스에서 클래스를 재정의하면 해당 클래스가 그대로 유지됩니다.
답변
첫째, 사용자가 데이터를 수정하지 못하게하려면 필드를 제외하는 것이 더 깔끔해 보입니다. 숨겨진 필드로 포함하면 유선으로 전송할 데이터가 더 많아지고 원하지 않는 경우 악의적 인 사용자가 데이터를 수정하도록 초대합니다. 필드를 포함해야하지만 숨길만한 충분한 이유가있는 경우 모델 인수의 생성자에 키워드 인수를 전달할 수 있습니다. 아마도 이런 것 :
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
def __init__(self, *args, **kwargs):
from django.forms.widgets import HiddenInput
hide_condition = kwargs.pop('hide_condition',None)
super(MyModelForm, self).__init__(*args, **kwargs)
if hide_condition:
self.fields['fieldname'].widget = HiddenInput()
# or alternately: del self.fields['fieldname'] to remove it from the form altogether.
그렇다면 당신의 관점에서 :
form = MyModelForm(hide_condition=True)
뷰에서 모델 형식의 내부를 수정하는 것이이 접근법을 선호하지만 맛의 문제입니다.
답변
정상적인 형태로 할 수 있습니다
class MyModelForm(forms.ModelForm):
slug = forms.CharField(widget=forms.HiddenInput())
모델 양식이있는 경우 다음을 수행 할 수 있습니다.
class MyModelForm(forms.ModelForm):
class Meta:
model = TagStatus
fields = ('slug', 'ext')
widgets = {'slug': forms.HiddenInput()}
__init__
방법 을 무시할 수도 있습니다
class Myform(forms.Form):
def __init__(self, *args, **kwargs):
super(Myform, self).__init__(*args, **kwargs)
self.fields['slug'].widget = forms.HiddenInput()
답변
필드를 항상 숨기려면 다음을 사용하십시오.
class MyForm(forms.Form):
hidden_input = forms.CharField(widget=forms.HiddenInput(), initial="value")
답변
당신은 단지 CSS를 사용할 수 있습니다 :
#id_fieldname, label[for="id_fieldname"] {
position: absolute;
display: none
}
이렇게하면 필드와 레이블이 보이지 않게됩니다.