尝试使用通用视图,以便我可以通过面向用户的表单更新对象。我的代码在视图中看起来像这样:
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'作为表单嵌入吗?是否仍然由我添加表单添加其他内容,然后为它编写save()逻辑?我希望有关此通用视图及其工作方式的文档略多一些。
答案 0 :(得分:0)
它就在documentation:
中除了extra_context,模板的上下文将是:
form
:表示用于编辑对象的表单的django.forms.ModelForm
实例。这使您可以在模板系统中轻松引用表单域。
template_object_name
参数会影响实际对象的名称。
/编辑
Jeez,你们这些人......批评那里记录最好的开源项目之一,但是如果它是用勺子给你的话,甚至都没有尝试阅读文档。继续我对文档的引用:
例如,如果模型有两个字段,名称和地址:
<form action="" method="post"> <p>{{ form.name.label_tag }} {{ form.name }}</p> <p>{{ form.address.label_tag }} {{ form.address }}</p> </form>
有关在模板中使用Form对象的详细信息,请参阅表单文档。