Django 양식 필드를 숨겨진 필드로 변경 양식이 있습니다. 내 견해로는 특정

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
}

이렇게하면 필드와 레이블이 보이지 않게됩니다.