Django和form_valid方法

时间:2019-03-10 21:23:26

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

我正在学习有关用户身份验证和授权的Django课程。但是关键是我在这里不太了解form_valid()方法:

class ArticleCreateView(CreateView):
    model = Article
    template_name = 'article_new.html'
    fields = ('title', 'body') # new

    def form_valid(self, form): # new
        form.instance.author = self.request.user
        return super().form_valid(form)

我不知道此方法返回什么。

谢谢

2 个答案:

答案 0 :(得分:1)

在将正确的数据输入表单并且表单已成功验证且没有任何错误时,将调用此方法。您可以在此处处理成功后的逻辑,例如向用户发送通知电子邮件,重定向到“谢谢”页面等。

Django Documentation | Generic editing views

答案 1 :(得分:0)

感谢回答这个问题的人。

顺便说一下,这个例子来自这本书:Django for Beginners 3.1 使用 Python 和 Django 构建网站,作者 William S. Vincent

我也想知道这种方法发生了什么。所以,我打印了 变量。

print(f"form type: {type(form)}")

结果:

form type: <class 'django.forms.widgets.ArticleForm'>

及以下;是的,这确实是我填写的表格内容。

print(f"form: {form}")
form: 
<tr>
  <th>
    <label for="id_title">Title:</label>
  </th>
  <td>
    <input type="text" name="title" value="This is the title for this article" maxlength="255" required id="id_title">
  </td>
</tr>
<tr>
  <th>
    <label for="id_body">Body:</label>
  </th>
  <td>
    <textarea name="body" cols="40" rows="10" required id="id_body">And, this is the contents of this article,...blah, blah, blah.</textarea>
  </td>
</tr>

在这里,我们将用户重定向到这个新创建的文章的特定页面。在此示例中,文章是已创建的第 8 篇文章。 status_code=302 是 URL 重定向

print(f"response type: {type(response)}")
print(f"response: {response}")

结果如下:

response type: <class 'django.http.response.HttpResponseRedirect'>
response: <HttpResponseRedirect status_code=302, "text/html; charset=utf-8", url="/articles/8/">

当我查看重定向页面上的结果时,我可以看到 author 确实被分配了当前用户的值。因此,此方法负责将当前用户分配给作者字段。在表单中输入数据时无需让用户填写。

如果您转到 GitHub django/django 并在此存储库中搜索 form_valid,以下链接将包含有关如何使用 form_valid 的各种示例。

https://github.com/django/django/search?p=1&q=form_valid