[PYTHON] 모델 양식 추가 필드 (Django)에 위젯 지정
PYTHON모델 양식 추가 필드 (Django)에 위젯 지정
내 모델 양식에 여분의 필드를 추가해야합니다. 내 접근 방식은 다음과 같습니다.
class MyForm(forms.ModelForm):
extra_field = forms.CharField()
class Meta:
model = MyModel
widgets = {
#Does not work
'extra_field': forms.Textarea(attrs={'placeholder': u'Bla bla'}),
}
하지만 템플릿에 textarea가 아닌 맨손으로 입력 된 태그가 있기 때문에 class Meta의 extra_field에 대한 위젯 정의가 무시되는 것 같습니다. 그래서 다음 접근 방식을 적용합니다.
class MyForm(forms.ModelForm):
#It works fine
extra_field = forms.CharField(widget=forms.Textarea())
class Meta:
model = MyModel
그것은 완벽하게 작동하지만 Meta 선언 클래스에서 양식 필드에 위짓을 사용했습니다. 그래서 궁금합니다.
왜 내 첫 번째 접근 방식이 효과가 없습니까? 내가 뭘 잘못하고 있니?
해결법
-
==============================
1.그것은 여분의 필드면 중요하지 않습니다. 작동 방식 :
그것은 여분의 필드면 중요하지 않습니다. 작동 방식 :
class FooForm(forms.ModelForm): class Meta: model = People widgets = { 'name': forms.Textarea(attrs={'placeholder': u'Bla bla'}), }
그렇지 않습니다.
class FooForm(forms.ModelForm): name = forms.CharField() class Meta: model = People widgets = { 'name': forms.Textarea(attrs={'placeholder': u'Bla bla'}), }
이것은 실제로 문서화되지 않았습니다. 문서에서 해당 동작과 관련 될 수있는 최선의 방법이 있습니다 (그렇지 않을 수도 있습니다.)
이 동작의 구현은 django / forms / models.py 라인 219에 있습니다.
204 if opts.model: 205 # If a model is defined, extract form fields from it. 206 fields = fields_for_model(opts.model, opts.fields, 207 opts.exclude, opts.widgets, formfield_callback) 208 # make sure opts.fields doesn't specify an invalid field 209 none_model_fields = [k for k, v in fields.iteritems() if not v] 210 missing_fields = set(none_model_fields) - \ EE 211 set(declared_fields.keys()) 212 if missing_fields: 213 message = 'Unknown field(s) (%s) specified for %s' 214 message = message % (', '.join(missing_fields), 215 opts.model.__name__) 216 raise FieldError(message) 217 # Override default model fields with any custom declared ones 218 # (plus, include all the other declared fields). 219 fields.update(declared_fields)
206 행 다음에 fields [ 'name']. widget은 실제로 Meta.widgets에 지정된 Textarea입니다.
219 행에서 필드는 declared_fields 및 fields [ 'name']로 업데이트되고 widget은 CharField의 기본값 인 django.forms.widgets.TextInput이됩니다.
분명히 명시적인 필드 정의가 우선합니다.
좋은 질문, 좋은 질문에 감사드립니다.
-
==============================
2.위의 상황을 다음과 같이 해결했습니다.
위의 상황을 다음과 같이 해결했습니다.
class FooForm(forms.ModelForm): name = forms.CharField(widget=TextArea(attrs={'placeholder': u'Bla bla'})) class Meta: model = People
from https://stackoverflow.com/questions/12097825/specifying-widget-for-model-form-extra-field-django by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 위치 데이터에 파이썬에서 칼만 필터를 사용하는 방법? (0) | 2018.11.22 |
---|---|
[PYTHON] 다중 문자열 서식 지정 (0) | 2018.11.22 |
[PYTHON] BeautifulSoup 객체에 새 태그를 삽입하려면 어떻게해야합니까? (0) | 2018.11.22 |
[PYTHON] Python 2.7 주어진 값으로 사전 항목 수를 센다. (0) | 2018.11.22 |
[PYTHON] 파이썬에서 for 루프의 [] 괄호는 무엇을 의미합니까? (0) | 2018.11.22 |