2017-07-29 13 views
0

form.is_validでviews.pyは常にfalseを返します。私はDjangoのフォームを使用してそれを実装するためのフォームとHTMLを作成しました。form.is_valid常にfalseを返します

imgurpythonを使用してこの写真をimgurにアップロードしますが、これが最初に動作するはずです。

views.py

def upload_view(request): 
usr = check_validation(request) 

if usr: 
    if request.method == "GET": 
     form = PostForm() 
     return render(request, 'upload.html', {'form': form}) 
    elif request.method == "POST": 
     form = PostForm(request.POST, request.FILES) 
     if form.is_valid(): 
      pic = form.cleaned_data.get('image') 
      title = form.cleaned_data.get('caption') 
      post = PostForm() 
      post.user = usr 
      post.caption = title 
      post.image = pic 
      post.save() 
      return redirect('feed/') 
     else: 
      return render(request, 'upload.html', {'error_msg' : "Invalid Inputs"}) 

else: 
    return redirect('/login/') 

models.py

class Post(models.Model): 
    user = models.ForeignKey(User) 
    image = models.FileField(upload_to='user_images') 
    caption = models.CharField(max_length=240) 
    image_url = models.CharField(max_length=255) 
    created_on = models.DateTimeField(auto_now_add=True) 

forms.py

class PostForm(forms.ModelForm): 
    class Meta: 
     model = Post 
     fields = ['user', 'image', 'caption'] 

テンプレートは -

<form method="post" enctype="multipart/form-data" class="loginbox" style="margin-top:200px;"> 
    {% csrf_token %} 
     <p class="text-16">Upload to aperture.</p> 
    {{ form }} 
    <p class="text-16">{{ error_msg }}</p> 
    <input class="login-btn" type="submit" value="Upload"/> 
    </form> 
+0

[もっと速い回答を得るために、どのような状況で「緊急」や他の類似のフレーズを追加することができますか?](// meta.stackoverflow.com/q/326569) - 要約は、ボランティアに対処する理想的な方法ではなく、おそらく回答を得ることに逆効果があります。これをあなたの質問に追加しないでください。 – halfer

答えて

1

upload.htmlあなたの状況はそうあなただけのフォームを動作させるためにすることを使用する必要がformという名前の変数を1つだけ持っています。

<form method="post" enctype="multipart/form-data" class="loginbox" style="margin-top:200px;"> 
     {% csrf_token %} 
      <p class="text-16">Upload to aperture.</p> 
     <input type="file" accept="image/*" value="{{ form.image }}" name="image" class="login-btn"/><br/> 
     <input placeholder="Caption" class="input-default all-curve" rows="3" value="{{ form.caption }}" name="caption" /> 
     <p class="text-16">{{ form.error_msg }}</p> 
     <input class="login-btn" type="submit" value="Upload"/> 
     </form> 
+0

私のforms.pyには1つのフォームしかありませんが、この方法はうまくいきませんでした。( –

+0

@ YogeshKumarあなたのimage_urlフィールドは問題を引き起こしています。無効な –

+0

は '{{form}}'であってはいけません.Djangoによって期待されるものと異なる名前になる可能性がありますか? –

0

入力の名前がDjangoが期待している名前と異なる可能性があります。

つまり、request.POSTには、PostFormと異なるキーのデータが含まれている可能性があります。これが機能しない場合

は、内容で答えを更新しrequest.POSTrequest.FILESを印刷し、

<form method="post" enctype="multipart/form-data" class="loginbox" style="margin-top:200px;"> 
     {% csrf_token %} 
     {{ form }} 
     <input class="login-btn" type="submit" value="Upload"/> 
</form> 

、これを試してみてください。

関連する問題