2011-03-29 5 views
1

안녕하세요,Modelform이 유효성을 검사하고 성공적으로 저장 되었음에도 불구하고 ...

이것은 예상치 못한 결과입니다. 나는 내 견해로 다음을한다 ....

 (standard view stuff here...) 

     if post: 
      postform=PostForm(request.POST,instance=post, prefix="post") 
      tagform=TagForm(request.POST, instance=post,prefix='tags') 
      ohouse_form=Host_OHouseForm(request.POST,instance=post,prefix="ohouse") 
     else: 
      postform=PostForm(request.POST,prefix="post") 
      tagform=TagForm(request.POST, prefix='tags') 
      ohouse_form=Host_OHouseForm(request.POST,prefix="ohouse") 

        (....I first validate that postform and tagform are valid...) 
     if ohouse_form.is_valid(): 
      ohouse=ohouse_form.save(commit=False) 
      ohouse.post=post 
      ohouse.host=user 
      ohouse.save() 

문제의 형태는 모형이다. 저를 혼란스럽게하는 것은 양식이 유효하고 저장이 성공적이라는 관점에서보기가 제대로 작동하고 있다는 것입니다. 모델은 그 시점에서 저장해야합니다 ... 폼/모델에 문제가 있으면 오류를 확인하거나 발생시키지 않습니다.

하지만 인스턴스가 내 관리자 백엔드에 표시되지 않습니다. 그것은 또한 집에있는 쿼리 세트에는 없습니다.

이것은 당신이 접두사를 사용하는 것을 알 나에게

+0

양식의 유효성을 어떻게 확인합니까? 정확히 어떻게 확인 했니? 당신은 구원이 성공했다고 말합니다. 나는 그것을 얻지 못합니다 : 성공하지 못한다면 어떻게 성공할 수 있습니까? 어떻게 점검하고 있습니까? ''save()''를 사용하여 아무것도하지 않았습니까?''save() '를 사용하여 아무것도하지 않았습니까? 명백히 유감스럽게 생각합니다. 우리는 단지 atm을 많이 할 필요가 없습니다. –

+0

맞습니다. 따라서 일련의 반환 HttpResponse 문을 설정하여 "확인"했습니다. 디버깅은 필자의 지식 기반에서 큰 부분을 차지하므로 일반적으로 HttpResponse를 사용하여 디버깅합니다. 디버깅하려면 어떻게 인쇄합니까? 오류가 발생해야합니까? – Ben

+0

모델 또는 modelform save() 메서드를 재정의하지 않았습니다. 나는 여기에 더 많은 코드를 추가 할 것이지만 나의 견해는 대단히 길다. (실제로 문제가있어 일련의 작은 기능으로 나눠야한다.) – Ben

답변

1

최신 업데이트 :

매우 유망한 진전입니다. 즉, ID를 반환하는 것이 DB 쿼리이기 때문에 데이터베이스 쓰기가 발생하고 있음을 의미합니다.

print type(ohouse)도 마찬가지입니다. OHouse 개체를 저장하지 않는다고 느끼고 있습니다.

ModelFormsinstance=post을 전달하는 것으로 보입니다. 이는 옳지 않을 수 있습니다. 그러면 Host_OHouseForm({}, instance=post)은 새 Post 개체를 반환합니다.

저는 그게 문제라는 걸 알고 있습니다.

if post: 
     postform=PostForm(request.POST,instance=post, prefix="post") 
     tagform=TagForm(request.POST, instance=post,prefix='tags') 
     ohouse_form=Host_OHouseForm(request.POST,instance=post,prefix="ohouse") 
+0

나는 네가 절대적으로 옳다고 생각한다. 나는 그것을 지금 바꾸려고 노력할 것입니다. – Ben

+1

글쎄, 그렇지 않다면 내 컴퓨터를 먹을거야 –

+0

언제나처럼, 당신 말이 맞아. 내가 왜 인스턴스 인수에 외래 키를 던질 수 있다고 생각하는지 모르겠다. 당신은 도움이 귀중한 것입니다 – Ben

1

을 난처하게된다. 이 다른 대답에서 나는 이상한 행동을 발견했습니다.

Python - Django - Form choicefield and cleaned_data

편집 :

당신도 당신의 OHouse 양식에 대한 모든 인스턴스 = 게시물을 설정하는 의미입니까?

+0

예를 들어 예상되는 동작입니다."foo"를 접두어로 붙이면 폼 필드 이름이'foo-test_field'가됩니다.이 필드는 전달한 데이터에 존재하지 않습니다. 폼에서 볼 수있는'data'는 폼 생성자를 첫 번째 논의. –

+1

안녕하세요. 내 cleaned_data 필드가 예상대로 표시됩니다. 또한 접두어를 제거하는 방법을 문제의 근원이라고해도 알 수 없습니다. 여러 양식을 동시에 저장하고 있습니다. 접두사가 필요합니다 ... 맞습니까? – Ben

+0

@Yuji 설명 해 주셔서 고맙습니다. 그게 제가 생각한 것입니다. 그러나 포스터는 반환되지 않았으며 접두사 사용에 익숙하지 않았습니다. – DTing

관련 문제