2012-06-05 4 views
0

Я хочу сохранить и фильтровать объекты пользователей в своем приложении django. После ввода ниже кодов, то ImageField продолжает давать мне ошибку проверки, говоря:Ошибка фильтра Django

      This field is required. 

Это указывает на ImageField, что я должен заполнить его. Как я могу избавиться от этой ошибки и заставить ее фильтровать?

Модели

 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

сделал u журнал запрос.POST dict. что вы получаете? –

+0

попробуйте добавить blank = True и save..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) 

кстати, им не уверен, Джанго версию вы используете, но ваш код довольно грязный, какой-либо причине вы не используете CBVS и статические теги?

+0

, потому что после синхронизации базы данных в первый раз django определил ваши столбцы в базе данных как NOT NULL, так что вы удаляете таблицу и синхронизируете снова , или вы сами модифицируете схему – stuudent

+0

После ее изменения я получаю эту ошибку: TypeError at/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'], 

дает вам ошибку, потому что данных нет.

Смежные вопросы