2011-12-19 20 views
0

私はこのコードを動作させるのに苦労しています。私はPython 2.7とDjango 1.3を使用しています非表示の検証フォーム - Django

フォームを送信しようとすると、フォームに何か問題があるようなエラーページが表示されます。

私はイメージフィールドを持つモデルクラスを持っている:

class Livro (models.Model): 
    Titulo = models.CharField(max_length=200) 
    Autor = models.CharField(max_length=200) 
    Genero = models.CharField(max_length=100) 
    Editora = models.CharField(max_length=200) 
    Capa = models.ImageField(upload_to='media', blank=True, null=True) 
    ISBN = models.CharField(max_length=200) 
    Serie = models.CharField(max_length=200) 
    Data = models.DateField() 
    Tipocapa = models.CharField(max_length=100) 
    Lingua = models.ForeignKey(PropObra,'Lingua', related_name="lingualivro") 

    def __unicode__(self): 
     return self.Titulo 

これは私が実装した図である。

def salvalivro(request): 
    if request.method == 'POST': 
     form = LivroForm(request.POST, request.FILES) 
    if form.is_valid(): 
     form = LivroForm() 
     if not form.is_valid(): 
      return HttpResponseRedirect('/erro/') 
    return render_to_response('salvalivro.html', {'form': form,}, context_instance=RequestContext(request)) 

そして、これは私がテンプレート内で持っているコードです:

<form enctype="multipart/form-data" method="POST" action="/salvalivro/" >{% csrf_token %} 
{{ form.as_p }} 
<input type="submit" value="Salvar" /> 
</form> 

多分、エラーは私の鼻の前にありますが、私はこれを約3日間続けていて、r esult。私はDjangoのドキュメントやStackOverflowの他の多くの質問を読んだが、まだ何も得ていない。私は本当にいくつかの助けが必要です...

答えて

3

あなたのビューコードはあまり意味がありません。以前に作成したフォームが有効であることを確認した後でフォームの新しいインスタンスを作成し、そうでない場合はエラーページにリダイレクトします。だから、あなたのコードはあなたの質問に記述されているように期待どおりに動いているように私に見えます。

ではなく、このビューを試してみてください(Djangoの1.3を想定):

def salvalivro(request): 
    form = LivroForm(request.POST or None, request.FILES or None) 
    if request.method == 'POST': 
     if form.is_valid(): 
      form.save() #or whatever else you need 
    return render(request, 'salvalivro.html', {'form': form}) 
+0

ありがとうございました!私はVBScript(QlikView)で終日働いていますが、時にはPythonの字下げやコード構造がちょっと難しいです。今それは完全に正常に動作します:D –

+1

あなたは大歓迎です。お役に立てて嬉しいです。私はあなたがVBScriptよりも多くのPythonを楽しんでいることを願っています! – Brandon

+0

あなたは私が賭ける:) –

3

あなたの意見は非常に奇妙です。投稿の場合は、投稿データを使用してフォームをインスタンス化します。次に、それが有効であることを確認します。データのないフォームを再インスタンス化し、それが有効でないかどうかをチェックしてください。もちろん、その時点では、それは有効ではありません。なぜなら、2番目のインスタンス化にはデータがないからです。つまり、常にリダイレクトされますが、別のビューにリダイレクトしているため、フォームによって生成された実際のエラーメッセージは表示されません。

using a form in a viewの標準的なドキュメントを詳しく見てください。パターンは正確に従うべきです。

+0

私は百万回のように、あそこ見て、私が持っていた状況にそれを適用できませんでした。私が前に言ったように、エラーは私の鼻の前にあり、私はそれを見ることができませんでした。あなたの答えをありがとう、それはあまりにも助けました:) –

関連する問題