2013-08-27 62 views
0

您好,我有一個模板用的ModelForm產生的一種形式:Django不接受我的形式

<body> 
    <form action="/traitermodificationentrant.html/" method="POST" class="form-horizontal" > 

    <legend> Modification du courrier numero {{ cemodifier.id}} </legend> 
    <table> 
     {{form}} 

    </table> 
    <input type="hidden" value="{{ cemodifier.id}}" name="id"> 
    <input type="submit" value="modifier" /> 

</form> 
    </body> 
    </html> 

,當我在按鈕cliked提交處理由視圖處理

def traiter_modif_entrant(request): 
if request.method == 'POST': 
    form = Form_modif_courrier_Entrant(request.POST) 
    if form.is_valid(): 
     ident = form.cleaned_data['id'] 
     c = Courrier_Entrant.objects.get(id=ident) 
     c.reference = form.cleaned_data['reference'] 
     c.objet = form.cleaned_data['objet'] 
     c.categorie =form.clneaned_data['categorie'] 
     c.expediteur = form.cleaned_data['expediteur'] 
     c.save() 
     HttpResponseRedirect('/') 
else : 
    form =Form_modif_courrier_Entrant() 
return render_to_response('index.html', RequestContext(request,{})) 

和我的問題是形式始終是無效的

在此先感謝!

+1

你看到了什麼無效的消息,有什麼好說的? – mariodev

+0

它支持什麼樣的模型? ModelForms上的有效性由模型的各個屬性上的清除函數決定。 – DivinusVox

+0

我看不到一個無效的消息,但修改對象c = Courrier_Entrant.objects.get(id = ident)沒有完成 – medman

回答

0

也許試試這個:

ident = int(form.cleaned_data['id']) 

,或者如果不工作,然後嘗試「PK」,而不是:

c = Courrier_Entrant.objects.get(pk=ident) 
+0

它不起作用,所以我認爲如果request.method = ='POST':返回false,因爲當我爲這個測試添加子句'else'時,這是在處理其他人的處理 – medman

0

您還沒有實際傳遞的形式向模板,所以它不會顯示,也不會顯示錯誤。視圖的最後一行應該是:

return render_to_response('index.html', RequestContext(request,{'form': form})) 

,或者更好,使用render快捷:

return render(request, 'index.html', {'form': form}) 
+0

我已經在視圖中通過做了 – medman

+0

模板中的窗體def defif_entrant(request, IDENT): CE = Courrier_Entrant.objects.get(ID = IDENT) REF = cE.reference OBJ = cE.objet categorie = cE.categorie EXP = cE.expediteur ModifEntrantFormSet = formset_factory(Form_modif_courrier_Entrant,MAX_NUM = 1 ) form = ModifEntrantFormSet(initial = [ { '參考':REF, '客體':物鏡, 'categorie':categorie, 'expediteur':EXP, } ]) 選擇render_to_response回報( 'traitermodificationentrant.html',{ 'cemodifier': cE,'form':form}) – medman

+0

那麼,你已經以非常奇怪的方式做了事情(除了在評論中發佈未格式化的代碼,這尤其奇怪)。首先,你正在使用一個formset的單一形式。其次,你在一個視圖中渲染你的初始表單,但在另一個視圖中處理它,沒有任何理由。第三,正如我上面所說的,如果出現錯誤,你不會將表單傳回模板,所以你永遠不會看到它們。請查看關於在視圖中使用表單的Django文檔,以瞭解您應該做什麼。 –