课程中保存图片是新建记录, 那如何修改记录?

课程中保存图片是新建记录, 那如何修改记录?

这是视图函数http://img1.sycdn.imooc.com//climg/5f4b6bf409f8580512660651.jpg

这是表单http://img1.sycdn.imooc.com//climg/5f4b6c1f097c731812170712.jpg

这是数据库结构http://img1.sycdn.imooc.com//climg/5f4b6c5d09dc290608530255.jpg

这是model http://img1.sycdn.imooc.com//climg/5f4b6c720964bdc211960597.jpg

我就是想把图片的路径存入到对应的登入的用户的avatar里,但是 用save函数就是新创了一条记录. 老师能给出如何把把图片的路径存入到对应的登入的用户的avatar里的代码吗?

正在回答

登陆购买课程后可参与讨论,去登陆

6回答

同学你好,
1、需要将forms的 save()方法和调用父类的init方法删除

http://img1.sycdn.imooc.com//climg/5f4ccf4d09b6191105630299.jpg
2、需要修改views.py 中的avatar()方法

http://img1.sycdn.imooc.com//climg/5f4ccf4d09b6191105630299.jpg

提问者 努力学习啊啊 2020-08-31 15:21:04

http://img1.sycdn.imooc.com//climg/5f4ca352098df78817280448.jpg

老师, 我是这个意思 ,不用obj.save()的话   左侧的avatar文件夹下面就没有图片文件  


我保存了个 名字为 3.jpg 的图片 是能直接保存到数据库 

http://img1.sycdn.imooc.com//climg/5f4ca453098d72f409200044.jpg


但是没有obj.save()左侧的 avatar下面就没有图片文件


有了obj.save()这句话后 我保存了一个名字叫 1.jpg的文件 在左侧的avatar文件下就会有这个文件图片,但同时 user表中也会多出一条数据, 如图

http://img1.sycdn.imooc.com//climg/5f4ca4ad09ab142c09350219.jpg

我想知道怎么解决这个问题


 

  • 提问者 努力学习啊啊 #1
    这是 视图函数中的代码 def avatar(request): """上传头像""" user = User.objects.get(pk=request.session['user_id']) if request.method == 'POST': form = AvatarUploadForm(request=request, files=request.FILES, data=request.POST) if form.is_valid(): form.save() # User.objects.filter(username=None or '').delete() print('成功', form.cleaned_data['avatar']) else: form = AvatarUploadForm(request=request) return render(request, 'file_upload_form.html', { 'form': form })
    2020-08-31 15:22:20
好帮手慕小猿 2020-08-31 15:08:06

同学你好,可以使用filter()过滤用数据,用.update()更新数据的字段。老师这边试了是可以,没有创建新数据。不需要object.save()方法http://img1.sycdn.imooc.com//climg/5f4ca19e0956289d11800144.jpg

若还有问题,同学可将所有代码以复制粘贴的形式提供下,方便更好的为您解决问题

  • 提问者 努力学习啊啊 #1
    老师,请看另一条回复,谢谢您.
    2020-08-31 15:21:26
提问者 努力学习啊啊 2020-08-30 20:29:06

可以这样解决, 但这招也太勉强了吧 

这是save方法

http://img1.sycdn.imooc.com//climg/5f4b9b6c09bd7ef112050313.jpg

这是视图函数的后续http://img1.sycdn.imooc.com//climg/5f4b9b9109e2f88912840729.jpg

  • 同学你好,因为图片是上传到avatar下的,获取图片名是1.jpg这种,如果想输入avatar/1.jpg只能是拼接的方法。
    2020-08-31 10:41:50
  • 那保存呢,要想保存图片就玩obj.save才能保存下来图片到avatar文件下,到这样也会在user表中多一条记录,有没有什么出了图中以外的其他方法
    2020-08-31 11:21:22
提问者 努力学习啊啊 2020-08-30 20:15:18
  • 提问者 努力学习啊啊 #1
    User.objects.filter(id=self.request.session['user_id']).update ( avatar=self.cleaned_data['avatar']) 但是只实现了保存图片名到avatar, 并不能保存成avatar/b11.jpg像这样的格式, 而且最主要的是想物理保存图片到medias/avatar/ xxx.jpg, 就得obj.save() 这样又会多出一条记录,该怎么解决呢?
    2020-08-30 20:18:12
提问者 努力学习啊啊 2020-08-30 17:10:56

我试过直接赋值,但是好像是因为 avatar 是imgagefiled类型 直接赋值会报错


  • 同学你好,可以给你提供个思路,当获取到修改的图片路径后,可以使用filter过滤前用户的信息,再使用update更新数据库的字段,例如:user.object.filter(username=username).update(avatar=‘图片路径’) 也可以使用js,课程中有涉及到该功能,同学可以自己查找资料
    2020-08-30 19:28:08
  • 我可以 重定义save函数User.objects.filter(id=self.request.session['user_id']).update( avatar=self.cleaned_data['avatar'] ) 但是只实现了保存图片名到avatar, 并不能保存成avatar/b11.jpg像这样的格式,而且要想物理保存下来图片, 就得obj.save() 这样又会多出一条记录
    2020-08-30 20:14:27
  • 老师 ,看 另一条回复的图
    2020-08-30 20:15:39
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
3.从网页搭建入门Python Web
  • 参与学习           人
  • 提交作业       218    份
  • 解答问题       3562    个

本阶段带你用Python开发一个网站,学习主流框架Django+Flask是Python Web开发的第一步,在基础知识上实现积分商城的项目开发,体验真实的项目开发流程,提高解决编程问题和效率的能力。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师