2015-07-15 2 views
2

Я видел подобные проблемы в stackoverflow, но, похоже, не могу заставить мои работать. Когда у меня есть пользователь, загружающий фотографии, если вход остается пустым, Django будет вызывать MultiValueDictKeyError. У меня пустой = True в моем изображенииField, но он, похоже, не работает.Django - ImageField blank = True не работает

У меня есть следующий класс статья в моем приложении:

def content_file_name(instance, filename): 
    return '/'.join(['content', instance.user.username, filename]) 


class Content(models.Model): 
    user = models.OneToOneField(User, unique=True) 
    image1 = models.ImageField(upload_to=content_file_name, null=True, blank=True) 
    image2 = models.ImageField(upload_to=content_file_name, null=True, blank=True) 
    image3 = models.ImageField(upload_to=content_file_name, null=True, blank=True) 
    image4 = models.ImageField(upload_to=content_file_name, null=True, blank=True) 
    image5 = models.ImageField(upload_to=content_file_name, null=True, blank=True) 
    image6 = models.ImageField(upload_to=content_file_name, null=True, blank=True) 
    image7 = models.ImageField(upload_to=content_file_name, null=True, blank=True) 
    image8 = models.ImageField(upload_to=content_file_name, null=True, blank=True) 
    terms = models.ImageField(upload_to=content_file_name, null=True, blank=True) 

Это то, что мой views.py выглядит следующим образом:

def register(request): 
    if request.POST: 
     content = Content() 
     content.user = request.user 
     content.image1 = request.FILES['image1_upload'] 
     content.image3 = request.FILES['image3_upload'] 
     content.image4 = request.FILES['image4_upload'] 
     content.image5 = request.FILES['image5_upload'] 
     content.image6 = request.FILES['image6_upload'] 
     content.image7 = request.FILES['image7_upload'] 
     content.image8 = request.FILES['image8_upload'] 
     content.terms = request.POST.get('terms') 
     content.save() 
     return redirect('/portal/register') 

    try: 
     gallery = Content.objects.get(user=request.user) 
     return render(request, 'portal/register.html', {'gallery': gallery}) 
    except ObjectDoesNotExist: 
     print 'Does Not Exist!' 
     return render(request, 'portal/register.html') 

Это ошибка Django бросает:

Request Method: POST 
Request URL: http://127.0.0.1:8000/portal/register/ 
Django Version: 1.8.2 
Exception Type: MultiValueDictKeyError 
Exception Value: "'image1_upload'" 
Exception Location: /Library/Python/2.7/site-packages/django/utils/datastructures.py in __getitem__, line 322 
Python Executable: /usr/bin/python 

html, где изображения uplaoded:

<div class="container"> 
    <form role="form" method="post" action="." id="js-upload-form" enctype="multipart/form-data"> 
         {% csrf_token %} 
    <div class="row"> 

     <div class="col-lg-12"> 
      <h1 class="page-header">{{ user.username }}</h1> 
     </div> 

     <div class="col-lg-3 col-md-4 col-xs-6 thumb"> 
      <a class="thumbnail" href="#"> 
       <img class="img-responsive" id="image1" src="/media/{{ gallery.image1 }}" alt=""> 
      </a> 
      <input type="file" name="image1_upload" id="image1_upload" multiple> 
     </div> 

     <div class="col-lg-3 col-md-4 col-xs-6 thumb"> 
      <a class="thumbnail" href="#"> 
       <img class="img-responsive" id="image2" src="/media/{{ gallery.image2 }}" alt=""> 
      </a> 
      <input type="file" name="image2_upload" id="image2_upload" multiple> 
     </div> 


     <div class="col-lg-3 col-md-4 col-xs-6 thumb"> 
      <a class="thumbnail" href="#"> 
       <img class="img-responsive" id="image3" src="/media/{{ gallery.image3 }}" alt=""> 
      </a> 
      <input type="file" name="image3_upload" id="image3_upload" multiple> 
     </div> 

     <div class="col-lg-3 col-md-4 col-xs-6 thumb"> 
      <a class="thumbnail" href="#"> 
       <img class="img-responsive" id="image4" src="/media/{{ gallery.image4 }}" alt=""> 
      </a> 
      <input type="file" name="image4_upload" id="image4_upload" multiple> 
     </div> 

     <div class="col-lg-3 col-md-4 col-xs-6 thumb"> 
      <a class="thumbnail" href="#"> 
       <img class="img-responsive" id="image5" src="/media/{{ gallery.image5 }}" alt=""> 
      </a> 
      <input type="file" name="image5_upload" id="image5_upload" multiple> 
     </div> 

     <div class="col-lg-3 col-md-4 col-xs-6 thumb"> 
      <a class="thumbnail" href="#"> 
       <img class="img-responsive" id="image6" src="/media/{{ gallery.image6 }}" alt=""> 
      </a> 
      <input type="file" name="image6_upload" id="image6_upload" multiple> 
     </div> 

     <div class="col-lg-3 col-md-4 col-xs-6 thumb"> 
      <a class="thumbnail" href="#"> 
       <img class="img-responsive" id="image7" src="/media/{{ gallery.image7 }}" alt=""> 
      </a> 
      <input type="file" name="image7_upload" id="image7_upload" multiple> 
     </div> 

     <div class="col-lg-3 col-md-4 col-xs-6 thumb"> 
      <a class="thumbnail" href="#"> 
       <img class="img-responsive" id="image8" src="/media/{{ gallery.image8 }}" alt=""> 
      </a> 
      <input type="file" name="image8_upload" id="image8_upload" multiple> 
     </div> 
    </div> 
+0

давайте посмотрим вашу форму. – onyeka

+0

Я не использую формы. Просто используя id = "" в html-шаблоне – Ryan113

ответ

2

Если поле формы осталось пустым, тогда request.FILES ['form_field'] не существует. Вместо этого вы должны использовать что-то подобное:

content.image1 = request.FILES.get('image1_upload', None) 

Таким образом, если поле формы не существует поле модель получит значение Нет.

Вы также можете просто проверить, если файл существует поле в файлах, но он заканчивает тем, что чуть более многословен:

if 'image1_upload' in request.FILES: 
    content.image1 = request.FILES.image1_upload 
+0

Вторая часть работала для меня. Спасибо. Я очень ценю помощь! – Ryan113