如何解决Django的如何分配正确的变量以预填充表格
我试图将表单预先填充到编辑条目中,但是在分配正确的变量时遇到问题。
我只用一个文本进行了填充就可以进行测试。但是有人可以提示如何从util.save_entry(title,content)中检索内容和标题。
我的测试:
def edit_entry(request):
if request.method == "POST":
form = EditEntryForm(request.POST)
if form.is_valid():
title = form.cleaned_data["title"]
content = form.cleaned_data["content"]
util.save_entry(title,content)
args = {'form':form,'content':content}
return render (request,"encyclopedia/edit.html",{
"name": title,"content": content
},args)
if request.method == "GET":
util.save_entry(title,content)
form = EditEntryForm(initial={'title': title,'content': content})
return render(request,{
"form": EditEntryForm(initial={'title': title,'content': content})
})
解决方法
为什么不使用CBV? UpdtateView处理特定对象(在这种情况下,您要更新/编辑的对象)的数据检索。但是,在两种情况下(函数视图或类视图),您都必须传递一些标识符(我建议使用PK或slug)来检索该对象,您需要通过URL进行此操作,这可能是您所缺少的。正如我告诉您的那样,UpdateView已经可以处理此问题,但是对于您而言,使用函数视图是这样的:
对于最佳实践(在这种情况下,出于目的),请添加self
,request
,*args
和**kwargs
作为edit_entry
函数的参数,那么您可以通过在函数的开头添加以下代码来获取要编辑的对象的标识符:
identifier=request.kwargs['identifier']
因此,在您的urls.py
中,您应该具有:
path('url/to/edit/<identifier>',...)
然后,在identifier
的{{1}}定义下面,定义一个变量以检索要编辑的特定对象
edit_entry
将对象传递给上下文,就像处理表单和模板一样:
object=MyModel.objects.get(identifier=identifier)
这应该可以完成,因为您的<input type="your-field-type" class="some-class" name="field" id="id_field" value="{{object.field}}">
方法已经可以使用了。
抱歉,答案有点广泛。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。