ModelForms를 사용하여 사용자 지정 CSS 클래스로 양식을 출력하려고합니다.
urls.py :
url(r'^mymodel/add/$',
MyModelCreate.as_view(template_name='add_MyModel.html'),
name='mymodel-add')
views.py :
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from myapp.models import MyModel
class MyModelCreate(CreateView):
model=MyModel
def get_context_data(self, **kwargs):
context=super(MyModelUpdate, self).get_context_data(**kwargs)
context['css'] = settings.CSS_PATH
return context
기본 ModelForm의 init을 재정의하고 모든 필드를 반복 하려고 시도했습니다 .
class MyBaseForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(MyBaseForm, self).__init__(*args, **kwargs)
for key in self.fields:
self.fields[key].widget.attrs.update(
{'class' : 'field-class',
'placeholder':self.fields[key].label
})
formfield_callback
기본 클래스를 추가하기 위해 Form 클래스를 설정해 보았습니다 .
def add_field_classes(f, **kwargs):
field = f.formfield(**kwargs)
if field:
w = field.widget
if 'class' not in field.widget.attrs:
field.widget.attrs['class'] = ''
field.widget.attrs['class'] += ' form_class'
if isinstance(w, forms.widgets.SelectMultiple):
field.widget.attrs['class'] += ' multiselect'
return field
class MyModelForm(forms.ModelForm):
formfield_callback=add_field_classes
... 위젯을 통해 속성 설정을 시도했습니다.
class MyModelForm(forms.ModelForm):
class Meta:
fields = ('field1',)
widgets={'field1':forms.Textarea(attrs={'class':'field-class'}),}
내가 무엇을하든 템플릿은 클래스없이 위젯을 출력합니다. 나는 단지 사용 {{form}}
을 시도했고 필드를 반복하여 시도했습니다.{{for field in form}}{{endfor}}
양식 인스턴스와 템플릿을 사용 manage.py shell
하고 렌더링하면 클래스가 포함되므로 뷰 수준에서 어떤 일이 발생했을 것 같습니다.
어떤 아이디어?
보기에서 사용자 지정 양식을 사용해야합니다. CreateView에 form_class를 지정하지 않으면 django가 생성합니다.
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from myapp.models import MyModel
class MyModelCreate(CreateView):
model=MyModel
form_class = MyBaseForm
def get_context_data(self, **kwargs):
context=super(MyModelUpdate, self).get_context_data(**kwargs)
context['css'] = settings.CSS_PATH
return context
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다