Django从Model填充Form

时间:2018-02-25 03:25:34

标签: python django

Django 2.0.2

Python 3.6.3

您好,

我仍然试图通过首先进入django项目来学习Python。我有一个“配置文件”模型,扩展了“用户”模型。我的个人资料有ModelForm。我有一个create操作,可以创建新配置文件并保存它和用户信息。一切正常。

我正在尝试添加其他CRUD操作,并开始使用“编辑”方法。我已阅读"Creating forms from models" django doc。

我看到他们的成语(从上面的链接复制):

    >>> class ArticleForm(ModelForm):
    ...     class Meta:
    ...         model = Article
    ...         fields = ['pub_date', 'headline', 'content', 'reporter']

    # Creating a form to add an article.
    >>> form = ArticleForm()

    # Creating a form to change an existing article.
    >>> article = Article.objects.get(pk=1)
    >>> form = ArticleForm(instance=article)

在我的代码中,我正在尝试:

 1  def edit(request, pk):
 2      try:
 3          profile = Profile.objects.get(pk=pk)
 4
 5          if request.method == 'POST':
 6              form = ProfileForm(request.POST, instance=profile)
 7          else:
 8              form = ProfileForm(instance=profile)
 9
10          if form.is_valid():
11              profile = form.save(commit=False)
12              profile.user = request.user
13              profile.save()
14              my_render = render(request, 'Members/index.html', {
15                  'profile': profile
16              })
17          else:
18              my_render = render(request, 'Members/profile.html', {
19                  'profileEdit': form,
20                  'profileState': "edit"
21              })
22      except Profile.DoesNotExist:
23          raise Http404("No Profile matches the given query.")
24
25      return my_render

因此,在我的调试器中,我可以创建一个帐户。然后,我可以单击触发此编辑操作的按钮。

第3行:产生我想要编辑的配置文件的有效副本(在我看来)。

第8行是下一行执行的。它会生成一个form对象,但不会填充配置文件实例。

第18行是下一个因为表单显然无效。 render在表单中生成缺失值错误。

我是否错过了使用模型数据填充表单的步骤?

1 个答案:

答案 0 :(得分:1)

如果请求是POST,您只需要检查表单是否有效。

此外,我建议调查已经完美结构且易于扩展的Django CBV。