'QueryDict' object 在 django 中没有属性 'caption'

'QueryDict' object has no attribute 'caption' in 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 但 none 有效。非常感谢您的帮助。

试试这个

request.POST['caption']

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

两者都从表单 post 数据中获取标题值。在我看来,后者通过为标题指定默认值只是一种更安全的方式。