2012-06-05 87 views
0

我想在我的django應用程序中保存和篩選用戶對象。輸入下面的代碼後,imagefield不斷給我一個驗證錯誤,說:Django篩選器錯誤

      This field is required. 

它指向我應該填補它的圖像場。我如何擺脫這個錯誤並使其過濾?

模型

 class Fin(models.Model): 
     user=models.ForeignKey(User) 
     title=models.CharField(max_length=250) 
     main_view=models.ImageField(upload_to="photos") 
     side_view=models.ImageField(upload_to="photos") 
     address=models.CharField(max_length=200) 
     city=models.CharField(max_length=200) 
     state=models.CharField(max_length=200) 
     guideline=models.TextField(max_length=1000) 

     def __unicode__(self): 
       return self.title 

     def get_absolute_url(self): 
      return self.title 

    class FinForm(ModelForm): 
     class Meta: 
      model=Fin 
      fields=('title','main_view','side_view', 'address','city','state','guideline') 
      exclude=('user') 

查看

 def fincrib(request): 
      extra_data_context={} 
      #if there's nothing in the field do nothing. 
      if request. method=="POST": 
       form =FinForm(request.POST) 
       if form.is_valid(): 
        data=form.cleaned_data 
        newfincribs=Fin(
        user= request.user, 
        title=data['title'], 
        main_view=Fin.objects.latest['main_view'], 
        side_view=Fin.objects.latest['side_view'], 
        address=data['address'], 
        city=data['city'], 
        state=data['state'], 
        guideline=data['guideline']) 
       newfincribs.save() 
       extra_data_context.update({'FinForm':form}) 
     else: 
      form = FinForm() 
      extra_data_context.update({'FinForm':form}) 
     extra_data_context.update({'Fins':Fin.objects.filter(user=request.user)}) 

     plan=Fin.objects.filter(user=request.user) 
     paginator=Paginator(plan, 5) 

     try: 
      page=request.GET.get('page', '1') 
     except ValueError: 
      page=1 

     try: 
      Fins=paginator.page(page) 
     except (EmptyPage, InvalidPage): 
      Fins=paginator.page(paginator.num_pages) 
     extra_data_context.update({'Fins': Fins}) 
     return render_to_response('post.html',extra_data_context,context_instance=RequestContext(request)) 

模板

 {% block content %} 
      <form action="." method="POST"> 
       {% csrf_token %} 
     <center> {{FinForm.as_p}} </center> 
      <input type="submit" value="Submit"/> 
      </form> 


      {% for Fin in Fins.object_list %} 
      <tr> 
      <a href="{% url profiles_edit_profile %}"> {{Fin.user}} </a> </p> </strong> 
      <p>{{Fin.title}}</p> 
      <p><img src="{{MEDIA_URL}}/{{Fin.main_view}}"/></p> 
      <p> <img src="{{MEDIA_URL}}/{{Fin.side_view}}"/></p> 
      <p> {{Fin.address}} </p> 
      <p> {{Fin.city}}</p> 
       <p> {{Fin.state}}</p> 
       <p> {{Fin.guideline}}</p> 
      {% endfor %} 

    <div class="pagination"> 
     <span class="step-links"> 
      {% if Fins.has_previous %} 
       <a href="?page={{ Fins.previous_page_number }}">previous</a> 
      {% endif %} 

    <span class="current"> 
     Page {{ Fins.number }} of {{ Fins.paginator.num_pages }} 
    </span> 

     {% if Fins.has_next %} 
      <a href="?page={{ Fins.next_page_number }}">next</a> 
     {% endif %} 
     </span> 
     </div> 
    {% endblock %} 
+0

做了你的日誌request.POST字典。你有什麼? –

+0

嘗試添加blank = True並保存..lets看看錶中存儲了什麼數據 –

回答

-1

變化

main_view=models.ImageField(upload_to="photos") 
side_view=models.ImageField(upload_to="photos") 

main_view=models.ImageField(upload_to="photos", blank=True, null=True) 
side_view=models.ImageField(upload_to="photos", blank=True, null=True) 

BTW,即時通訊不知道哪個Django的你正在使用的版本,但你的代碼是相當混亂的,你沒有使用CBVS和靜態變量的原因嗎?

+0

,因爲在第一次同步數據庫之後,django將數據庫中的列定義爲NOT NULL,所以要麼刪除表並重新同步,或者你自己修改模式 – stuudent

+0

改變它之後,我得到這個錯誤:/ crip /'instancemethod'對象的類型錯誤沒有屬性'getitem'我正在使用Django 1.4和Python 2.7.3 - – picomon

0

這是因爲默認情況下,所有模型字段都是必需的,這意味着如果要在數據庫中創建並保存新模型實例,則應填寫所有必填字段。也許

main_view=Fin.objects.latest['main_view'], 
side_view=Fin.objects.latest['side_view'], 

給你的錯誤,因爲沒有數據。