2012-01-02 6 views
3

私のdjangoアプリケーションでは、管理アプリケーションと同じデータを追加しても、フォームは真を返すことはありません。私が使用している場合、私はそれが正常に動作し得ることができますDjango形式is_valid常にfalse

<html> 
<body> 
    <form enctype="multipart/form-data" action="/image/uploadImage" method="post">{% csrf_token %} 
    {{ form.as_p }} 
    <input type="submit" value="Submit" /> 
    </form> 
    </body> 
</html> 

:よう

from django.http import HttpResponse, HttpResponseRedirect 
from django.shortcuts import render_to_response 
from competition.models import Image, UploadForm 

# Create your views here. 

def index(request): 
    images = Image.objects.all().order_by('emailAddress') 
    return render_to_response('images/index.html', {'images': images}) 

def uploadImage(request): 
    if request.method == 'POST': # If the form has been submitted... 
     form = UploadForm(request.POST) # A form bound to the POST data 
     if form.is_valid(): # All validation rules pass 
      emailAddress = form.cleaned_data['emailAddress'] 
      image = form.cleaned_data['image'] 
      caption = form.cleaned_data['caption'] 
      i = Image(emailAddress=emailAddress, image = image, caption = caption) 
      i.save() 
      return HttpResponseRedirect('../image/') 
     else: 
      return render_to_response('images/upload.html', {'form': form}) 
    else: 
     form = UploadForm() # An unbound form 
     return render_to_response('images/upload.html', {'form': form}) 

マイテンプレートが見えます:

from django.db import models 
from django.db.models import ImageField, signals 
from django.dispatch import dispatcher 
from django.forms import ModelForm 

# Create your models here. 
class Image(models.Model): 
    emailAddress = models.EmailField(max_length=75) 
    image = ImageField(upload_to='photos') 
    caption = models.CharField(max_length=100) 

class UploadForm(ModelForm): 
    class Meta: 
     model = Image 

私のviews.pyは以下のようになりますように私のmodel.pyに見えます管理アプリケーションには必要ですが、一般的なフォームが必要です。これは、電子メールアドレスまたはイメージのいずれかを要求し続ける(このエラーはイメージフィールドの上に表示されます)。なぜ私のフォームは有効ではないのでしょうか?

+2

フォームにCSRFトークンを追加

form = UploadForm(request.POST, request.FILES) 

を参照してくださいする必要があります。 –

+0

@Cat Plus Plus、CSRFトークンを追加しましたが、エラーはまだ発生しています。なぜこれは違いをもたらしたでしょうか?私はis_validという考えはデータの正当性をチェックすることだと思った。 – Dean

答えて

3

フォームをrequest.FILESとrequest.POSTでインスタンス化する必要があります。

ビューに手動でイメージを作成する代わりに、モデルフォームを保存することができます。

+1

これは十分に文書化されていません。うん、私はそれを試みたが、それは機能していなかったので、私は今それを変更するだろう。 – Dean

+1

ドキュメントは私には明らかです。覚えておいてください、Djangoはオープンソースプロジェクトです。ドキュメントを改善する方法を提案したチケットを開くことは、スタックオーバーフローのコメントでそれを批判するより建設的です。 – Alasdair

関連する問題