当前位置: 首页 > 面试题库 >

Django基于添加表单编辑表单?

越星晖
2023-03-14
问题内容

我已经做了一个不错的表格,并使用了一个复杂的“添加”函数来处理它。像这样开始

def add(req):
    if req.method == 'POST':
        form = ArticleForm(req.POST)
        if form.is_valid():
            article = form.save(commit=False)
            article.author = req.user
            # more processing ...

现在,我真的不想重复该edit()方法中的所有功能,因此我想edit可以使用完全相同的模板,甚至可以id在表单中添加一个字段,以便该add函数知道其正在编辑的内容。但这有几个问题

  1. 我将article.id在哪里放置add功能?之所以必须在此之后,是form.save因为这是创建文章的地方,但它甚至永远都不会达到那个目的,因为由于唯一的约束,表单是无效的(除非用户编辑了所有内容)。我可以删除is_valid支票,但随后form.save失败。
  2. 如果表单实际上是无效的,则不会保留我在edit函数中动态添加的字段。
    那么我该如何处理呢?

问题答案:

如果要从ModelForm扩展表单,请使用instance关键字参数。在这里,我们传递的是现有的instance还是新的,取决于我们是在编辑还是添加现有的文章。在这两种情况下,author都在实例上设置了字段,因此commit=False不是必需的。还要注意,我假设只有作者可以编辑自己的文章,因此是HttpResponseForbidden响应。

from django.http import HttpResponseForbidden
from django.shortcuts import get_object_or_404, redirect, render, reverse

@login_required
def edit(request, id=None, template_name=’article_edit_template.html’):
if id:
article = get_object_or_404(Article, pk=id)
if article.author != request.user:
return HttpResponseForbidden()
else:
article = Article(author=request.user)

form = ArticleForm(request.POST or None, instance=article)
if request.POST and form.is_valid():
    form.save()

    # Save was successful, so redirect to another page
    redirect_url = reverse(article_save_success)
    return redirect(redirect_url)

return render(request, template_name, {
    'form': form
})

并在您的urls.py:

(r’^article/new/$’, views.edit, {}, ‘article_new’),
(r’^article/edit/(?P \d+)/$’, views.edit, {}, ‘article_edit’),
edit添加和编辑使用相同的视图,但是只有编辑URL模式将ID传递给视图。为了使它与您的表单一起使用,您需要author从表单中省略该字段:

class ArticleForm(forms.ModelForm):
class Meta:
model = Article
exclude = (‘author’,)



 类似资料:
  • 我是新来的Symfony,继承了一个项目,原来是php自定义,现在是Symfony 3的一半和一半。 我对Symfony知之甚少,但在php方面做了大量工作。 我想在产品表中添加一个名为"majorItem"的字段 我已经将majoritem添加到Products类中,将其添加到表单生成器中,并通过phpmyadmin将其添加到表中。 当应用程序构建表单时,我可以看到新的表单项。 如果我手动更改数

  • 我试图概念化我的结构和值,以组织表单中的多个表中的表单响应基于我的表单问题响应之一(更改的位置)选择的值。我有一个清单,到目前为止完成如下。我还列出了额外的步骤,以及我认为我需要创造什么来实现我想要的。有人能指导我指出我可能存在的问题或更好的方法吗? 打开表格-已完成 打开电子表格-已完成 Form将正确格式的响应保存到电子表格-已完成 设置对变量的表单响应-完成 将表单问题设置为变量-已完成 在

  • 问题内容: 我想使用Ajax自动将新表单添加到Django表单集中,以便当用户单击“添加”按钮时,它将运行JavaScript,该JavaScript将新表单(属于表单集的一部分)添加到页面中。 问题答案: 这就是我使用jQuery的方式: 我的模板: 在一个javascript文件中: 它能做什么: 接受作为第一个参数,的作为第二个参数。什么是应该做的是把它传递它应该复制。在这种情况下,我将其传

  • 问题内容: 有一个这样的表单字段,名为Planning,我需要将title属性添加到选择中,最后渲染如下: 如何实现? 问题答案: 你必须对该字段进行子类化,以采取任何方式指定你想要的标题以及显示新属性的小部件。 如果你有这样的事情(请注意:完全未经测试): …你应该能够做到这一点:

  • 问题内容: 我是django的新手,所以对我的新手问题感到抱歉,我 有一个模型,我需要让用户使用django表单或任何其他方式在其中编辑数据。 看上面的图像,我想显示此表单,其中已准备好填充数据,并让用户对其进行更新。 做这个的最好方式是什么 ? 编辑:这是我的views.py代码 请帮忙 问题答案: 假设你使用,请使用关键字参数,并传递你要更新的模型。 因此,如果你具有和(后者必须扩展),那么你

  • 问题内容: 我正在尝试用Java编写程序来管理我的Bookie帐户。我是java的新手,所以我认为我会选择一些简单的方法来了解事情的原理。我决定使用表格视图并使各个单元格可编辑。我一直在关注本教程http://java- buddy.blogspot.co.uk/2012/04/javafx-2-editable-tableview.html 。它详细说明了如何使用Java代码执行此操作,并将其复