Я написал это приложение для загрузки простого изображения, где пользователи должны иметь возможность добавлять надписи к загруженному изображению.Объект 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
, но никто не работал. Поэтому оцените вашу помощь.
Это сработало. Большое спасибо! По какой-то причине вторая форма более безопасна? – Jand
Это личное предпочтение тому, как вы его используете, я предпочитаю использовать второй метод. Второй метод просто устанавливает значение заголовка в значение «По умолчанию», если по той или иной причине он не находится в данных сообщения. Вы указываете значение по умолчанию вместо приложения, пытающегося получить доступ к ключу, которого нет, и созданию исключения. –