Django使用create_update update_object的通用视图,表单不显示

时间:2009-12-01 17:56:54

标签: django python

尝试使用通用视图,以便我可以通过面向用户的表单更新对象。我的代码在视图中看起来像这样:

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()逻辑?我希望有关此通用视图及其工作方式的文档略多一些。

1 个答案:

答案 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对象的详细信息,请参阅表单文档。