我正在从views.py文件更新模型中的某些字段。使用时,所有其他字段均已正确更新
Profile.objects.filter(id=user_profile.id).update( bio=bio, city=city, date_of_birth=dob, profile_pic=profile_pic, gender=gender )
只是,profile_pic = models.ImageField(blank=True)未更新,奇怪的是,当我Profile从admins.py检查模型时,它显示了我上传的文件名,但是我的文件未显示在我的/media目录中(我在其中上传了所有图片)
profile_pic = models.ImageField(blank=True)
Profile
/media
views.py
def edit_submit(request): if request.method == 'POST': profile_pic = request.POST.get('profile_pic') bio = request.POST.get('bio') city = request.POST.get('city') dob = request.POST.get('dob') gender = request.POST.get('gender') user_profile = Profile.objects.get(user=request.user) Profile.objects.filter(id=user_profile.id).update( bio=bio, city=city, date_of_birth=dob, profile_pic=profile_pic, gender=gender ) return HttpResponseRedirect(reverse('profile', args=[user_profile.id]))
这就是我在settings.py中管理媒体文件的方式
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') MEDIA_URL = '/media/'
我认为只有文本存储在ImageField中,并且Image不会上移到/media目录中注:我正在使用<input type="file" name="profile_pic" class="change_user_img">从模板获取图像
<input type="file" name="profile_pic" class="change_user_img">
该QuerySet.update()方法不会调用save()模型,因此不会执行将图像放入存储区的常规机制。另外,您必须从request.FILESnot检索上传的图像request.POST。
QuerySet.update()
save()
request.FILES
request.POST
update()如果您在模型实例上设置属性然后调用save(),而不是使用,则应该将映像保存到磁盘上的正确位置。例如:
update()
profile_pic = request.FILES.get('profile_pic') # Use request.FILES bio = request.POST.get('bio') city = request.POST.get('city') dob = request.POST.get('dob') gender = request.POST.get('gender') user_profile = Profile.objects.get(user=request.user) user_profile.bio = bio user_profile.city = city user_profile.date_of_birth = dob user_profile.profile_pic = profile_pic user_profile.gender = gender user_profile.save()
如评论中所述,还必须确保已enctype="multipart/form-data"设置表单。
enctype="multipart/form-data"