Django使用通用视图创建更新update_object,表单未显示

0 投票
1 回答
788 浏览
提问于 2025-04-15 16:34

我正在尝试使用一个通用视图,这样我就可以通过用户界面上的表单来更新一个对象。我的代码在视图部分是这样的:

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>

想了解更多关于在模板中使用表单对象的信息,可以查看表单文档。

撰写回答