2017-07-29 198 views
0

form.is_valid在views.py中總是返回false。我用Django表單來創建一個表單和html來實現它。form.is_valid始終返回false

我會將這張照片上傳到imgur,使用imgurpython後來,但首先這應該工作。

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'] 

模板 - upload.html

<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

你的上下文只有一個變量命名form所以你必須使用,只有讓你的表格的工作。

<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沒有隻有一種形式有這麼多,加上這種方法沒有工作:( –

+0

@YogeshKumar你的image_url字段造成的麻煩。你的表單不發送這個字段和它的空,所以這就是爲什麼它的無效 –

+0

不應該是'{{form}}嗎?它可能是給予字段的名稱與Django預期的名稱不同? –

0

您的輸入名稱可能與Django期望的名稱不同。

也就是說,request.POST可能包含與PostForm所期待的不同關鍵字中的數據。

試試這個,

<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> 

如果這不起作用,打印request.POSTrequest.FILES然後更新內容的答案。