【问题标题】:could someone explain why we return super().form_valid(form) in form_valid method in CreateView in django?有人可以解释为什么我们在 django 的 CreateView 中的 form_valid 方法中返回 super().form_valid(form) 吗?
【发布时间】:2021-02-17 18:46:35
【问题描述】:

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

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)

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

【问题讨论】:

    标签: python django django-views django-class-based-views


    【解决方案1】:

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

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

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

    可能想了解更多关于继承的信息。

    【讨论】:

    • 我认为他需要先添加 instance = form.save(commit=False) 才能将用户实例添加到表单中
    • 没有 form.save(commit=False) 用于函数视图。 form_valid 是正确的
    • 真的吗?我不这么认为。我不是在谈论 form_valid。那是对的。我说的是他的form_valid函数里面,他需要加上instance=form.save(commit=False)。这告诉表单不要保存并等到添加用户实例。它不仅适用于功能视图。 dashdrum.com/blog/2011/12/…
    • 如果您查看dashdrum.com/blog/2011/12/…,它不会调用超级。 Super 将使用函数内部的行为为您保存。
    • 现在说得通了。
    猜你喜欢
    • 1970-01-01
    • 2020-05-08
    • 2018-04-07
    • 2015-11-21
    • 2015-10-18
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多