2014-10-31 134 views
0

Form.is_valid()總是返回false。這是我的代碼。form.is_valid():總是返回false

#urls.py 
url(r'^create/', "app.views.createpost", name="createpost"), 

我的models.py

class Post(models.Model): 
    """docstring for Post""" 
    post_image = AjaxImageField(upload_to='posts', max_width=200, max_height=200, crop=True, null= False, default='site_media/media/BobMarley/bob1.jpg') 
    poster = models.ForeignKey(User, null= False, default=User.objects.get(username="admin") 

這裏是我的forms.py

#forms.py 
class AjaxImageUploadForm(forms.Form): 
    image = forms.URLField(widget=AjaxImageWidget(upload_to='posts'))  

view.py

#views.py 
def createpost(request): 

    if request.method == 'POST': 
     form = AjaxImageUploadForm(request.POST, request.FILES) 
     if form.is_valid(): 
      newpost = Post(post_image = request.FILES['image']) 
      newpost.poster = request.user 
      newpost.save() 

      return HttpResponseRedirect('/create/') 


    else: 
     form = AjaxImageUploadForm() # An empty, unbound form 


    posts = Post.objects.all() 

    return render_to_response('create.html',{'posts': posts, 'form': form},context_instance=RequestContext(request)) 

模板

#create.html 
{% block extra_head %}  
    {{ form.media }} 
{% endblock %} 
{% block body %} 
    <form method="POST" enctype="multipart/form-data" action="{% url "createpost" %}">  
     {% csrf_token %} 
     {{ form.errors}} 
     {{ form.as_p }} 
     <button type="submit" name='image'>Upload</button> 
    </form> 
{% endblock %} 

該窗體從未有效,並且顯示的錯誤是「此字段是必需的」。 這是表單控件我使用Django的包叫做Django的ajaximage和他們的自定義部件(AjaxImageWidget)可能是一個自定義的文本組件

class AjaxImageWidget(widgets.TextInput): 

謝謝您開始創建

<tr><th><label for="id_image">Image:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul> 
<div class="ajaximage"><a class="file-link" target="_blank" href=""> <img class="file-img" src=""></a> <a class="file-remove" href="#remove">Remove</a> 
<input class="file-path" type="hidden" value="" id="id_image" name="image" /> <input type="file" class="file-input" name="image"/> <input class="file-dest" type="hidden" name="image" value="/ajaximage/upload/posts/0/0/0"> <div class="progress progress-striped active"> <div class="bar"></div></div>  
</div> 
</td></tr> 

幫助

+0

表單對象在哪裏創建?它的課程在哪裏?另外,請正確縮進您的代碼。 – Marcin 2014-10-31 10:19:50

+0

你的'超級'上Post init對我來說看起來很陌生 – Anzel 2014-10-31 10:28:12

+1

你的模型班被徹底打破了。 '__init__'方法主動阻止你創建一個填充的實例,或者從db中加載一個實例。你應該完全刪除它。 – 2014-10-31 10:30:26

回答

1

您的模型類上不需要init。另外,null = False是默認值。我不確定文本'管理員'將默認給用戶名爲admin的用戶。你需要做的:

default=User.objects.get(username="admin")

你也可以包括在創建對象的海報分配,像這樣:

newpost = Post(post_image=request.FILES['image'], poster=request.user)

爲了使表單驗證,你需要把空白=真實地像這樣:

poster = models.ForeignKey(User, blank=True, default=User.objects.get(username="admin")

我をuld也使表單成爲ModelForm:

class AjaxImageUploadForm(forms.ModelForm): 
    class Meta: 
     model=Post 
     exclude=['poster',] 
+0

感謝您的建議,但表單仍未驗證 – 2014-10-31 11:09:24

+1

非常感謝,並且繼續使用相同的自定義小部件我添加了這個 小部件= { 'post_image':AjaxImageWidget(upload_to ='posts'), } – 2014-10-31 11:46:10