使用 update() 方法时 Django ImageField 不更新
Django ImageField is not updating when update() method is used
我正在从 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
模型时它显示我上传的文件名,但我的文件不是显示在我的 /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 中,图像没有上传到 /media
目录
注意:我正在使用 <input type="file" name="profile_pic" class="change_user_img">
从模板
获取图像
在 profile_pic = ...
上指定 upload_to
:Docs here。
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"
属性集。
我正在从 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
模型时它显示我上传的文件名,但我的文件不是显示在我的 /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 中,图像没有上传到 /media
目录
注意:我正在使用 <input type="file" name="profile_pic" class="change_user_img">
从模板
在 profile_pic = ...
上指定 upload_to
:Docs here。
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"
属性集。