2009-03-05 2 views
0

이상한 문제가 사라 :장고 외래 키는 형태의 장고

나는 Form.class는 다음과 같이 정의 ...

class MeetingForm(forms.Form): 
    owner = forms.ModelChoiceField(
      queryset=Profile.objects.all(), 
      widget=forms.HiddenInput()) 
    date = forms.DateTimeField() 
    name = forms.CharField(max_length=30) 
    etc. 

을 그리고 난 같은 함수를 호출하여 새로운 인스턴스를 생성 이 ...

def newMeetingForm(request,profile) : 
    mf = MeetingForm({ 
     'date' : date.today(),   
     }) 
    return mf 

예상대로 작동합니다. 단, 회의의 "소유자"필드는 비어 있습니다. 내가 어떻게해야 생각하는 것은이 같은 newMeetingForm의 소유자 필드를 미리 입력 : 인수 "프로필"프로필 개체입니다

def newMeetingForm(request,profile) : 
    mf = MeetingForm({ 
     'date' : date.today(), 
     'owner' : profile, 
     }) 
    return mf 

.

그러나 이것을 실행하면 양식이 렌더링되지 않습니다.

내가 템플릿이 사용하고 있습니다

{{ form.as_p }} 

그러나 말 그대로 빈 문자열로 나올 것으로 보인다 newMeetingForm에 여분의 '소유자'라인

. 어떻게 든 ModelChoiceField가 미리 값을 채운 소유자 값을 렌더링하려고 시도 할 때 자동으로 실패하는 것으로 가정합니다. 그러나 그 값은 괜찮아 보입니다. 그럼 내가 뭘 더 찾고 있니?

+0

어떤 이유가 커뮤니티 위키로 분류 되나요? 좋은 질문 같아. –

+0

저는 커뮤니티를 기본적으로 커뮤니티로 분류합니다 ... 누구든지 커뮤니티를 개선 할 수 있기를 바랍니다. – interstar

답변

3

코드가 올바르게 표시됩니다. 필자는 실제로 양식과 양식 작성 코드를 사용하여 내 컴퓨터에서 "스텁"프로젝트를 실행하여 성공적인 결과를 얻었습니다 (필자는 Profile 모델이 어떻게 보이는지 추측했습니다).

고려해야 할 사항 중 하나는 렌더링에 영향을주지 않지만 사전 양식이 initial 데이터 인 인스턴스를 인스턴스화해야한다는 것입니다. 첫 번째 위치 인수로 전달하면 django는 해당 데이터가 POST 데이터임을 의미한다고 가정하므로 양식의 유효성을 검사해야합니다. (당신이 이미 이것을 알고 있고 질문을 제기 할 목적으로 짧은 커팅 만하는 경우 사과하십시오.)

종종 장고보기가 중요한 오류를 삼키는 것으로 나타납니다. 테스트하려면 양식은 장고 쉘에서 그 일을 시도 :

$ python manage.py shell 
>>> from blah.models import Profile 
>>> from blah.forms import MeetingForm 
>>> from datetime import date 
>>> p = Profile.objects.get(id=someid) 
>>> mf = MeetingForm(initial={'date':date.today(), 'owner':p}) 
>>> print mf.as_p() 

이 출력됩니다 형식과 심각한 폭발이있을 경우, 오류뿐만 아니라.

또한 이것은 바보 같지만 다음과 같은 내용도했습니다. (여분의 눈 세트 ... 등 ...) '폼'변수를 전달하고 있는지 확인하십시오. 템플릿 렌더링을위한 컨텍스트에? 변수는 '형식'이라고하며 'mf'가 아닐 수도 있습니다.

희망 하시겠습니까?

+0

예 ... 그 것이었다 ("초기 ="). 매우 고맙습니다. 잠시 동안 고군분투하고있었습니다. – interstar

+0

이 컨텍스트에서 첫 번째 인수의 유효성을 알지 못했습니다. – interstar

+0

차가워 요! 다행히 도울 수있어.템플릿에서 빈 문자열을 좋아해야합니다 :-) –

0

프로필의 실제 인스턴스를 newMeetingForm에 전달 하시겠습니까?

+0

나는 확실히 ... "request.user.get_profile()"이 나온다 – interstar