首页 > 解决方案 > 有人可以解释为什么我们在 django 的 CreateView 中的 form_valid 方法中返回 super().form_valid(form) 吗?

问题描述

我正在尝试链接与用户关联的项目

class createItem(CreateView):
model=Item
fields = ['x','y','image']


def form_valid(self,form):
    form.instance.user_name=self.request.user
    return super().form_valid(form)

这是片段,我不明白我们为什么要使用super().form_valid(form),而且我对使用 self 也有疑问self.request.user,我是 django 的新手,如果有人帮助我,这将非常有帮助。

标签: pythondjangodjango-viewsdjango-class-based-views

解决方案


Super()允许您访问和修改基类的方法(class createItem(CreateView))

因此,在您的情况下,您将登录的用户 ID 插入到表单字段中,而在提交表单之前该字段不存在。

def form_valid是一种基本上询问“表单字段有效吗?”的方法。如果答案是肯定的(它们是有效的),则将用户 ID 作为字段插入。因此,您正在动态修改类的默认行为。你可以通过调用 super 来做到这一点。

可能想阅读更多关于继承的信息。


推荐阅读