2009-05-18 5 views
3

두 개의 날짜 필드가있는 모델에 모델 서식 세트가 있습니다.이 필드 세트는 다시 모델의 DateTimeField입니다. 그러나 템플릿에 표시되면 텍스트 필드로 표시됩니다. 드롭 다운 상자로 표시하려면 어떻게해야합니까?모델 형식 및 날짜 필드

WFormSet = inlineformset_factory(UserProfile, W, can_delete=False,exclude=[<list of fields to be excluded>], extra=3) 

이렇게하면 modelformset이 초기화됩니다.

나는 이러한 설정

답변

6

이 당신의 ModelForm 정의에 override the default field types이다 수행하는 일반적인 방법을 무시합니까.

당신이 모델에하여 DateField이 있다면 아래 예제는 작동합니다

는 (나는 내가 초에 다시 그에게 올거야 ... 당신이 DateTimeField를 참고). 일반적으로 지정된 것과 동일한 필드 유형을 지정하게되지만 양식 필드 생성자에 다른 위젯을 전달합니다.

from django.db import models 
from django import forms 
from django.forms.extras import SelectDateWidget 

class MyModel(models.Model): 
    a_date_field = models.DateField() 

class MyModelForm(forms.ModelForm): 
    a_date_field = forms.DateField(widget=SelectDateWidget()) 

    class Meta: 
     model = MyModel 

내 지식, 장고 1.0.x.에서 DateTimeField 제공 상응하는 위젯, 없다 이 경우 SelectDateWidget의 하위 클래스로 사용자 정의 위젯을 만들고 싶을 것입니다. 나는 SelectDateTimeWidget에있는 빠른 google에서 당신이 찾고있는 위젯 인 것처럼 보이는 것을 만들고있는 몇몇 다른 사람들이 있다는 것을 주목합니다. 나는 그것들을 사용하지 않았기 때문에 emptor는주의해야하지만, this SelectDateTimeWidget patch과 같은 것이 시작하기에 좋은 장소 일 수 있습니다.


편집합니다 ModelFormset 또는 InlineModelFormset를 사용하는 경우, 당신은 여전히 ​​inlineformet_factory 기능에 form=MyModelForm를 전달하여이를 달성 할 수

두 모델의 formset 공장 실제로 일반 formset_factory 생성자를 호출하기 때문에이 작동
MyModelFormset = inlineformset_factory(MyParentModel, MyModel, form=MyModelForm) 

자신의 구현에서. 그것은 문서에 명시 적으로 명시되지 않았기 때문에 알아 내기가 조금 힘듭니다 ... Django 문서는 모델 formset 팩토리가 정상 formset_factory를 확장한다는 것을 언급하여이 기능을 언급합니다. 내가 의심 스러울 때마다 django/forms/models.py을 열어 formset 팩토리 함수의 전체 서명을 확인합니다.

+0

감사 회신, 그러나 나는 양식을 초기화 할 inlineformset 사용하고 있음을 언급하는 것을 잊었다. 나는 또한 질문을 편집했다. – crashekar

+0

걱정할 필요가 없습니다 ... 답변을 업데이트했습니다. –

+0

좋은 답변입니다. 하지만 ... "금지"는 "금지 된"것을 의미합니다 - 나는 그것이 당신이 의미하는 것이라고 생각하지 않습니다. 아마도 "처방 된"것은 당신이 찾고있는 의미에 더 가깝습니다. –