2015-05-04 2 views
2

Я написал это приложение для загрузки простого изображения, где пользователи должны иметь возможность добавлять надписи к загруженному изображению.Объект QueryDict не имеет атрибута 'caption' в django

взглядов является:

@login_required 
def upload(request): 
    thisuser =User.objects.get(username = request.user.username) 

    args= {} 

    if request.method == 'POST': 
     picform = PicForm(request.POST, request.FILES) 
     if picform.is_valid(): 
      newpic = UserPic(picfile = request.FILES['picfile']) 
      newpic = picform.save(commit=False) 
      newpic.user_id = request.user.id 
      newpic.caption = request.POST.caption # <--problematic line 
      newpic.save() 
      message = "file %s is uploaded" % newpic 

      args['pic'] = newpic.picfile 
      args['caption'] = newpic.caption 

    else: 
     picform = PicForm() 

    args.update(csrf(request)) 
    args['picform'] = picform  

    return render_to_response('pics/upload.html',args, 
     context_instance=RequestContext(request)) 

Модель:

class UserPic(models.Model): 
    user = models.ForeignKey(User, unique=False) 
    picfile = ImageWithThumbsField(upload_to= get_uplaod_file_name,sizes=((200,200),)) 
    caption = models.TextField(max_length=200 , blank=True, null=True) 
    created_at = models.DateTimeField(auto_now_add=True) 

И шаблон:

<div> 
Upload New picture 

     <form action="/pics/upload/" method="post" enctype="multipart/form-data"> 
      {% csrf_token %} 

     <ul class="list-unstyled form-group"> 
    {{picform.as_ul}} 
     </ul> 
      </p> 
      <p><input type="submit" value="Upload" /></p> 
     </form> 
</div> 

Когда я загрузить фотографию, заполнить поле заголовка и отправить форму , Я получаю:

'QueryDict' object has no attribute 'caption' 

Я пробовал разные вещи вместо newpic.caption = request.POST.caption, но никто не работал. Поэтому оцените вашу помощь.

ответ

3

Попробуйте

request.POST['caption'] 

или

request.POST.get('caption', 'Default'). 

Как получить значение заголовка от формы почтовых данных. На мой взгляд, это более безопасный способ, указав значение по умолчанию для заголовка.

+0

Это сработало. Большое спасибо! По какой-то причине вторая форма более безопасна? – Jand

+0

Это личное предпочтение тому, как вы его используете, я предпочитаю использовать второй метод. Второй метод просто устанавливает значение заголовка в значение «По умолчанию», если по той или иной причине он не находится в данных сообщения. Вы указываете значение по умолчанию вместо приложения, пытающегося получить доступ к ключу, которого нет, и созданию исключения. –

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