[PYTHON] 어떻게 장고 양식에서 모델 필드를 비활성화 할 수 있습니까?
PYTHON어떻게 장고 양식에서 모델 필드를 비활성화 할 수 있습니까?
나는 이런 모델을 가지고있다 :
class MyModel(models.Model):
REGULAR = 1
PREMIUM = 2
STATUS_CHOICES = ((REGULAR, "regular"), (PREMIUM, "premium"))
name = models.CharField(max_length=30)
status = models.IntegerField(choices = STATUS_CHOICES, default = REGULAR)
class MyForm(forms.ModelForm):
class Meta:
model = models.MyModel
보기에서 한 필드를 초기화하고 편집 할 수 없게하려고합니다.
myform = MyForm(initial = {'status': requested_status})
myform.fields['status'].editable = False
그러나 사용자는 여전히 해당 필드를 변경할 수 있습니다.
내가 한 일을 성취하는 진정한 방법은 무엇입니까?
해결법
-
==============================
1.1 단계 : 프론트 엔드 위젯 사용 중지
1 단계 : 프론트 엔드 위젯 사용 중지
HTML readonly 속성을 사용하십시오. http://www.w3schools.com/tags/att_input_readonly.asp
또는 사용 중지 된 속성 : http://www.w3.org/TR/html401/interact/forms.html#adef-disabled
위젯 attrs 속성을 통해 임의의 HTML 키 값 쌍을 삽입 할 수 있습니다.
myform.fields['status'].widget.attrs['readonly'] = True # text input myform.fields['status'].widget.attrs['disabled'] = True # radio / checkbox
2 단계 : 백엔드에서 필드가 효과적으로 비활성화되었는지 확인합니다.
POST 입력에 관계없이 (누군가가 POST를 가짜로 만들거나 원시 HTML을 편집 할 수 있습니다.) 이미 존재하는 필드 값을 가져올 수 있도록 필드에 대한 메소드를 재정의하십시오.
def clean_status(self): # when field is cleaned, we always return the existing model field. return self.instance.status
-
==============================
2.제외 기능을 사용해 보셨습니까?
제외 기능을 사용해 보셨습니까?
이 같은
class PartialAuthorForm(ModelForm): class Meta: model = Author fields = ('name', 'title') class PartialAuthorForm(ModelForm): class Meta: model = Author exclude = ('birth_date',)
여기 참조
-
==============================
3.상태 필드에 대한 위젯 인스턴스를 사용자 정의하면됩니다.
상태 필드에 대한 위젯 인스턴스를 사용자 정의하면됩니다.
class MyModel(models.Model): REGULAR = 1 PREMIUM = 2 STATUS_CHOICES = ((REGULAR, "regular"), (PREMIUM, "premium")) name = models.CharField(max_length=30) status = models.IntegerField(choices = STATUS_CHOICES, default = REGULAR) class MyForm(forms.ModelForm): status = forms.CharField(widget=forms.TextInput(attrs={'readonly':'True'})) class Meta: model = models.MyModel
참조 : Django 문서
-
==============================
4.장고 1.9에서 :
장고 1.9에서 :
from django.forms import Textarea class MyModelForm(forms.ModelForm): class Meta: model = MyModel fields = '__all__' widgets = {'my_field_in_my_model': Textarea(attrs={'cols':80,'rows':1}),} def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['my_field_in_my_model'].disabled = True
-
==============================
5.그것을하는 아주 쉬운 방법이있다 :
그것을하는 아주 쉬운 방법이있다 :
class GenerateCertificate(models.Model): field_name = models.CharField( max_length=15, editable=False) def __unicode__(self): return unicode(self.field_name)
editable = False는 필드를 편집 할 수 없게 만듭니다.
from https://stackoverflow.com/questions/4945802/how-can-i-disable-a-model-field-in-a-django-form by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] python / PIL로 자동 자르기 (0) | 2018.10.24 |
---|---|
[PYTHON] Windows에서 파이썬이 사용하는 CA 저장소에 사용자 지정 CA 루트 인증서를 추가하는 방법은 무엇입니까? (0) | 2018.10.24 |
[PYTHON] 파이썬 3 - urllib, HTTP 오류 407 : 프록시 인증 필요 (0) | 2018.10.24 |
[PYTHON] Javascript를 사용하여 웹 사이트 스크랩? (0) | 2018.10.24 |
[PYTHON] 범위와 파이썬 최적화에서 세계 최소를 찾는 방법? (0) | 2018.10.24 |