django - form_valid 在 Django 中是如何工作的?它与 save() 相比如何?
问题描述
我在这里问的文档中对此的描述似乎非常稀疏且不清楚。那么 form_valid 方法到底在做什么呢?据我了解,它是通过 POST 方法触发的,它有点像在最后一行调用 save() 。form.instance.entry_author=self.request.user 在这一行我知道我们将当前用户设置为作者,但我不明白为什么表单引用实例以及表单从哪里获得?我想它内置在表单有效函数中?
class CreateEntryView(CreateView):
model = Entry
template_name='entries/create_entry.html'
fields = ['entry_title','entry_text']
def form_valid(self, form):
form.instance.entry_author=self.request.user
return super().form_valid(form)
解决方案
CreateView
是一个通用视图,它会自动为您做一些事情,而无需您自己编写逻辑。其中一件事是创建一个表单。您指定了要使用的模型,即Entry
. 基于fields
,CreateView
创建一个表单并使用该表单。
从文档:form_valid
保存表单实例,设置视图的当前对象,并重定向到 get_success_url()。
如果您有任何特殊要求,您可以覆盖它。请注意,entry_author
它不包含在表单中,fields
因此它不会出现在表单中。这里的想法是自动设置entry_author,而不是用户在表单中选择作者。
推荐阅读
- android - 曲线图像视图角android
- c# - 如何在 C# 中强制执行这种一对多约束?
- excel - 在两张相同的excel文件中将绿色填充为匹配的值,将红色填充为不同的值
- laravel - 如何使按钮在 Laravel 中对管理员类型的用户可见一次?
- javascript - 如何在我的 HTML 页面中禁用右键单击
- reactjs - onChange 和 onSelect 不适用于 React Hooks 循环中的 Select
- ms-access - 使用 Access ODBC 驱动程序更新包含列名中的特殊字符的 Access 表
- kubernetes - 如何授予在 Kubernetes 仪表板中指定命名空间的访问权限?
- php - 在运行时为 php 对象分配名称
- javascript - Webpack 4:模块解析失败:意外字符“@”。你可能需要一个合适的加载器来处理这个文件类型……