Django 更新表单

标签 django django-models django-forms django-views

我在一个页面中创建一个表单,然后在另一个页面中我试图拉出表单(填充了已经保存在其中的数据)并希望对其进行更改,以便在我保存时它会覆盖实例而不是创建另一个。

def edit(request):

    a = request.session.get('a',  None)
    form = Name_Form(request.POST, instance=a)
    if form.is_valid():
            j = form.save( commit=False )
            j.save()

这似乎有效,但它不会预填充表单。相反,它以一个已经“提交”为空白的空白表格开始(您会看到所有告诉您有关必填字段的错误)

我也尝试使用
form = Name_Form(initial={'id':a.id})

预填充表单。但是如果我这样做而不是 form = Name_Form(request.POST, instance=a)行它不会覆盖实例,它将创建一个新实例。

我似乎无法将这两个功能结合起来。

任何帮助表示赞赏

最佳答案

如果您使用 request.POST 设置表单,它将使用在 POST 数据中找到的值填充所有表单字段。
如果您在 GET 请求(其中 request.POST 为空)上执行此操作,则使用空值填充它。

尝试:

def edit(request):

    a = request.session.get('a',  None)

    if a is None:
        raise Http404('a was not found')

    if request.method == 'POST':
        form = Name_Form(request.POST, instance=a)
        if form.is_valid():
            j = form.save( commit=False )
            j.save()
    else:
        form = Name_Form( instance = a )

关于Django 更新表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9281926/

相关文章:

django-allauth 移动客户端 csrf 保护

django - 在 api View 方法上禁用 CSRF(django rest 框架)

django - 避免在不使用 raise Exception 的情况下将实例保存在 pre_save 信号中

python - Django : get_or_create Raises duplicate entry with together_unique

django - 我需要一个 ModelMultipleChoiceField 的 "raw id"小部件

django - 如何在 django 中创建这样一个带有复选框的表?

python - 如何在 django settings.py 中更改 'login_required' 的默认重定向

python - 从 SQL 表定义创建 Django 模型

mysql - django queryset union 不能只使用

python - 属性错误: type object 'Team' has no attribute '_meta'