重写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方法

http://img.mukewang.com/climg/5d4c05c30001df2f07540116.jpg

http://img.mukewang.com/climg/5d4c055d0001d4ab07240299.jpg

http://img.mukewang.com/climg/5d4c05420001f44411090728.jpg

在父类的save方法中没有处理上传的文件(保存微博记录)就直接提交上传没有将我们的数据保存到数据库中。

所以我们就要在save()中把微博记录保存到数据库再将文件上传到我们的media目录下。

如果我解决了同学的问题,请采纳!学习愉快^_^。

0

0 学习 · 3562 问题

查看课程