当前位置: 首页 > 面试题库 >

使用update()方法时,Django ImageField没有更新

拓拔元徽
2023-03-14
问题内容

我正在从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目录中(我在其中上传了所有图片)

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">从模板获取图像


问题答案:

QuerySet.update()方法不会调用save()模型,因此不会执行将图像放入存储区的常规机制。另外,您必须从request.FILESnot检索上传的图像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"设置表单。



 类似资料:
  • 需要更新的内容也发送过来, 其实就2个,password和salt,而且salt是根本没用上 @At public Object update(@Param("..")User user) { NutMap re = new NutMap(); String msg = checkUser(user, false); if (msg

  • 根据保存在 Windows 注册表中的加载项列表更新COMAddIns 集合的内容。 expression.Update expressionCOMAddIns 集合。 说明 在 Microsoft Office 应用程序中使用 COM 加载项之前,必须首先在注册表中将该加载项注册为 COM 组件,并得到相应的组件类别 ID (Component Category ID)。 示例 以下示例将根据保

  • 本文向大家介绍SQL Update多表联合更新的方法,包括了SQL Update多表联合更新的方法的使用技巧和注意事项,需要的朋友参考一下 有些时候我们需要同时更新多个表中的数据那么就需要用到下面方法了: (1) sqlite 多表更新方法 这是一个非常简单的批量更新语句 在SqlServer中支持此语法 sqlite中却不支持 sqlite中可转换为 如下语法 (2) SQL Server 多表

  • 我试图使用JDBC更新一个MSSQL实例,使用一个预先准备好的语句,在给定列名、要更新的值和更新的值时,我创建了一个方法来更新表中的任何记录。 第一个print语句打印出正确的值,这样我就知道输入是正确的,第二个print语句让我知道1行受影响,这是正确的。 如果我在Management Studio中运行脚本,脚本会运行良好并更新表,但如果我从java项目中运行脚本,则不会更新任何内容,也不会生

  • 问题内容: 请考虑以下表格: 部 员工 编写查询以返回人员总数为4或更多的那些部门的雇员的empname和deptname列。记录应按姓氏的字母顺序返回 这是我的看法: 您将如何对此进行改进? 问题答案: 这比较短,而且执行速度可能也更快 从分组开始。您不需要内部查询中的COUNT。然后,联接两个表只是为了获得名称。 *之所以使用 *INNER JOIN, 是因为一旦计数完成,我们已经知道 员工存

  • 为什么我需要再次使用hmap.put方法? 我的理解是这样的。 假设没有现有的键值对。所以,用 如果我在同一个实例中添加一个字符串,那么hashmap也应该自动更新,对吗?键=>列表对象。如果我添加到列表对象,那么对象引用不应该改变,对吗? 为什么我需要再次使用put方法并这样做?