2013-04-17 2 views
1

ModelForm 클래스를 사용하여 두 필드를 ChoiceField으로 설정했습니다. 내보기 중 하나를 위해, 나는 (지금처럼) 데이터베이스에 내 모델의 인스턴스를 가져옵니다 내 ModelForm 클래스의 양식을 작성하고 싶습니다 : 나는이 작업을 수행 할 때Django ModelForm ChoiceField 인스턴스 데이터를 표시하지 않습니다.

form = MyModel(instance=model_instance) 

을하고 폼을 렌더링 템플릿에서 필자는 대부분의 필드에 모델 인스턴스에서 가져온 값이 미리 채워져 있다는 것을 알았습니다. 이는 내가 원하는 것입니다. 그러나 이는 두 개의 ChoiceField 필드에 해당하지 않습니다. 이 옵션은 특정 옵션이 선택되지 않은 드롭 다운 선택 메뉴로 렌더링됩니다.

내 ModelForm 클래스에서 두 필드를 ChoiceField -type으로 정의하지 않으면 HTML의 일반 텍스트 입력 필드로 렌더링되고 데이터베이스 값을 사용하여 미리 채워집니다. 그러나 HTML에서 선택 옵션 입력 필드로 표시되도록 정의하면 아무 것도 미리 선택되지 않습니다. 데이터베이스의 값이 미리 선택되도록 변경할 수 있습니까?

편집 :

class App(models.Model): 
    CODES = (
     (u'a',u'annual'), 
     (u'm',u'monthly'), 
     (u'w',u'weekly') 
    ) 
    code = models.CharField(max_length=1, choices=CODES) 
    start_time = models.TimeField(blank=True, null=True) 
    end_time = models.TimeField(blank=True, null=True) 


class AppForm(ModelForm): 
    CODES = (
     (u'',u'Please select code'), 
     (u'a',u'annual'), 
     (u'm',u'monthly'), 
     (u'w',u'weekly') 
    ) 
    TIMES = (
     (u'00:00',u'All Day'), 
     (u'12:00',u'Noon') 
    ) 
    start_time = forms.ChoiceField(required=False, choices=TIMES) 
    end_time = forms.ChoiceField(required=False, choices=TIMES) 
    code = forms.ChoiceField(choices=CODES, label='Type') 

    class Meta: 
     model = App 

는 흥미롭게도, code 필드가 HTML로 렌더링 할 때 잘 미리 선택된 모델 인스턴스 값이 : 여기에 요청으로 내 모델과 양식에 대한 코드입니다. 모델 정의에서 choices 인수를 사용하면 차이가 있습니까?

UPDATE :

a = App.objects.get(id=16) 
a.start_time 

내가 datetime.time(12, 0) 같은 값을 얻을 : 난 그냥 내가 지금처럼 python manage.py shellApp 인스턴스를 당기면 것으로 나타났습니다. 하지만 장고 관리자는 App 인스턴스를 모두 볼 때 (None)start_timeend_time 아래에 표시합니다. 왜 그랬을까요?

+0

가능한 중복 http://stackoverflow.com/questions/624265/how-do-i-make-a-django -modelform-menu-item-selected-by-default) 및 더 많은 것. –

+0

모델과 양식에 코드를 게시 할 수 있습니까? 감사. – Amyth

+0

@Hedde, 기본 선택 옵션이 필요하지 않습니다. 선택한 옵션을 객체 인스턴스에서 가져 오려고합니다. 당신은 저를 위해 작동하지 않았기 때문에 저 다른 질문에 대한 답을 실제로 받아 들였습니다. – GChorn

답변

1

업데이트에 대한 응답으로 시간 문자열이 기본 시간 문자열 HH : MM 형식과 일치합니다. 사용자가 웹 사이트에서 수동으로 12:00에 입력하는 것과 같습니다. 값은 파싱되어 모델 저장시 시간으로 변환됩니다 (실제로 유효성을 검사 할 때).

그리고 모델을로드하면 물론 개체에서로드 된 초기 값이 필드의 (models.TimeField) 유형과 일치합니다. 당신이

(datetime.time(0,0),u'All Day'), 
    (datetime.time(12,0),u'Noon') 

으로 TIMES를 교체 할 경우

당신의 문제는 이상이어야한다.

앨런

[I가 기본적으로 선택 장고 ModelForm 메뉴 항목을 어떻게해야합니까?] (의
+0

안녕하세요 앨런, 답변 주셔서 감사합니다. 실제로 귀하의 답변을보기 직전에 실제로 동일한 결론에 도달했습니다 (본인의 질문에 실제로 답했습니다.). 흥미롭게도, 내가 문제를 조롱 할 때 발견 한 한 가지는, 시간의 문자열 표현을 사용하는 모델 정의에'CHOICES' 세트를 생성하면,이 값 중 하나를 양식에 저장할 때 오류가 발생합니다 (위의'AppForm' 정의에 'CHOICES'가 제공되었을 때 그렇게하지 않았습니다). 하지만 가장 이상한 점은''00 : 00 ''을 저장하려고 할 때 오류가 발생하지 않고 '12 : 00'만 남았습니다. – GChorn

+0

양식에 선택 사항을 제공하면 forms.TypedChoiceField에 인수 'coerce'를 datetime.time https://docs.djangoproject.com/en/dev/ref/forms/fields/#typedchoicefield로 설정해야합니다. 그리고 그 오류를 수정해야합니다. –