0

このコードを機能させるのに本当に苦労しています。Python2.7とDjango1.3を使用しています

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

画像フィールドを持つモデルクラスがあります:

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日間取り組んでいて、結果がありませんでした。DjangoのドキュメントやStackOverflowに関する他の多くの質問を読みましたが、それでも何も得られませんでした。私は本当に助けが必要です...

4

2 に答える 2

3

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

ビューでのフォームの使用については、標準のドキュメントをより詳しく調べる必要があります。これには、従うべき正確なパターンがあります。

于 2011-12-19T19:47:06.587 に答える
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})
于 2011-12-19T19:47:44.457 に答える