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