2017-07-29 90 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然后更新内容的答案。