重写save
来源:4-2 文件上传之ORM上传
洛维西
2019-08-08 18:30:18
这部分听了好几次都完全没听懂,老师能不能再讲一下,这里重写是为什么,整个重写过程都干了点儿啥。。
def save(self, user, commit=False): # 先不保存到数据库,先得到对象,接下来对这个对象进行修改,然后再保存 obj = super().save(commit) data = self.cleaned_data content = self.cleaned_data['content'] # 1. 创建微博的记录 weibo = Weibo.objects.create(user=user, content=content) # 2. 修改微博关联关系 obj.weibo = weibo obj.save() return obj
def file_upload_weibo(request): """ 发送带图片的微博 """ # 因为没有登录,用默认用户来进行微博发布 user = WeiboUser.objects.get(pk=1) if request.method == 'POST': form = WeiboImageForm(request.POST, request.FILES) if form.is_valid(): obj = form.save(user, False) print('保存成功', obj.pk) else: form = WeiboImageForm() return render(request, 'file_upload_weibo.html', {'form': form})
1回答
好帮手乔木
2019-08-08
同学你好:
我们继承的ModelForm中又继承了BaseModelForm,在这个类中有save()方法,所以我们可以重写save方法
在父类的save方法中没有处理上传的文件(保存微博记录)就直接提交上传没有将我们的数据保存到数据库中。
所以我们就要在save()中把微博记录保存到数据库再将文件上传到我们的media目录下。
如果我解决了同学的问题,请采纳!学习愉快^_^。
相似问题