我正在从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)
未更新,奇怪的是,当我从admins.py检查我的Profile
模型时,它显示了我上传的文件名,但我的文件未显示在{ {1}}目录(我在其中上传所有图像)
views.py
/media
这是我在settings.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]))
我认为ImageField中仅存储文本,并且Image不会上浮到MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
目录中
注意:我正在使用/media
从模板中获取图像
答案 0 :(得分:1)
QuerySet.update()
方法不会在模型上调用save()
,因此不会执行将图像放入存储区的常规机制。另外,您必须从request.FILES
而非request.POST
检索上载的图像。
如果不使用update()
,而是在模型实例上设置属性,然后调用save()
,则应将映像保存到磁盘上的正确位置。例如:
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"
。
答案 1 :(得分:0)
在upload_to
上指定profile_pic = ...
:Docs here。