Django使用通用视图创建更新update_object,表单未显示
我正在尝试使用一个通用视图,这样我就可以通过用户界面上的表单来更新一个对象。我的代码在视图部分是这样的:
from django.views.generic.create_update import update_object
@permission_required('myapp.change_foo', login_url="/accounts/login/")
def foo_update(request, foo_id):
return update_object(
request,
form_class=FooForm,
object_id=sr_id,
template_name = 'foo/update.html',
template_object_name = 'foo',
)
表单的定义是这样的:
class FooForm(ModelForm):
somefield = forms.CharField(
widget=forms.TextInput(attrs={'readonly':'readonly'})
)
class Meta:
model = Foo
在我的模板 foo/update.html 中,我有这样一段代码:
<form action="" method="post">
<table>
{{ foo.as_table }}
</table>
<p>
<input type="submit" value="Submit" />
</p>
</form>
之前我从来没有遇到过显示 'foo' 的问题,但这是我第一次使用这个特定的通用视图。没有语法错误,只是我的模板中根本没有显示表单。
update_object() 是不是没有把 'foo' 嵌入作为一个表单?难道我还得自己添加表单的内容,然后再写保存的逻辑吗?我希望关于这个通用视图及其工作原理的文档能多一些。
1 个回答
0
在这里可以找到相关信息,具体内容在文档中:
除了额外的上下文(extra_context),模板的上下文还包括:
form
:这是一个django.forms.ModelForm
的实例,表示用于编辑对象的表单。这样你就可以在模板中轻松引用表单字段了。
template_object_name
这个参数会影响实际对象的名称。
/edit
哎,你们这些人……在批评一个文档写得非常好的开源项目,但连文档都不愿意认真读一下,真是让人无奈。继续引用文档的内容:
例如,如果模型有两个字段,名字和地址:
<form action="" method="post"> <p>{{ form.name.label_tag }} {{ form.name }}</p> <p>{{ form.address.label_tag }} {{ form.address }}</p> </form>
想了解更多关于在模板中使用表单对象的信息,可以查看表单文档。