请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

modelform使用

用户修改头像时要在modelform 中传入instance=request.user否则无法成功修改头像。

image_form = UploadImageForm(request.POST, request.FILES, instance=request.user) 

而用户咨询的时候modelform中只要传入request.POST即可以了。

userask_form = UserAskForm(request.POST)

是不是因为form如果是文件的上传 就必须传入instance啊?


其实在10-7 节老师讲用户个人信息的修改的时候明确说了instance的问题,第二遍看到这里了,才对此有了认识,第一遍的时候没有体会到。

今天在我的代码中体会到了instance在modelform存储中的作用,真是用到了体会才是真切啊!! 同样一段代码在两种情况下:
1.没有传入instance

            user_reserve_form = UserEquipmentForm(
                   {'user': user, 'borrow_time': borrow_time, 'plan_to_return_time': plan_to_return_time, 'return_time': return_time,'equipment': equipment})
                   

效果是这样
图片描述

2.传入instance参数

            user_reserve_form = UserEquipmentForm(
                   {'user': user, 'borrow_time': borrow_time, 'plan_to_return_time': plan_to_return_time, 'return_time': return_time,'equipment': equipment},
                    instance=UserEquipment.objects.get(borrow_time__icontains=borrow_time)
                                                 )

效果如下
图片描述

其实老师在课程里都讲过这些内容,只有自己做的时候才能真的体会到,无论老师强调“这里很关键”多少遍,自己不做是体会不到的这些技巧。
3. 这里还体会到一个技巧(老师课程中也讲到过)
字段名__icontains
borrow_time__icontains,我发现有6位微妙的datetime经过template传到view中后就没有了只剩下 年月日时分秒,而数据库中的borrow_time是 年月日时分秒微妙,那么如果borrow_time=borrow_time这样查的话永远找不到那条记录的,我这里折腾了好久,刚开始一定要template把6位的微妙给我传到view这样就简单了,实在没有找到办法,最后想到了老师提到过用“__contains”就是说只匹配到秒,这样也可以找出那条记录,当然了最好是能把微妙信息包括进去这样就绝对保证找到条目的唯一性了。

正在回答 回答被采纳积分+3

1回答

Ethreal 2019-04-29 21:16:39

如果有instance参数就修改数据库中的记录,如果没有instance参数就在数据库中添加新的一条记录,这是modelform的,详细可以看官方文档对比源码去观察理解下

0 回复 有任何疑惑可以回复我~
  • 怪不得 用户咨询  没有传instance参数值,因为 用户咨询 本来就是需要新增一条记录。 而修改头像 则是要覆盖保存所以要存instance。
    回复 有任何疑惑可以回复我~ 2019-04-29 21:35:36
  • 我自己的业务逻辑 也用到了 modelform的存储机制,没有传入instance,我在navicat里看过 确实是 新增了一条,我当时就想知道为什么,我不想新增一条 我只想覆盖掉之前的记录。明天把instance传进去 看看是否实现覆盖了。 这个课程 看第二遍 比第一遍体会深入些了,因为有些用法如果不是自己去实现自己的业务逻辑是无法真正体会老师为什么要这么做的。
    回复 有任何疑惑可以回复我~ 2019-04-29 21:43:17
  • bobby 回复 提问者 weixin_慕斯卡4281563 #3
    是的,有些细节虽然第一次看用起来能成功,实际上要多看几次就能知道很多细节了
    回复 有任何疑惑可以回复我~ 2019-05-02 22:55:52
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信