如何替换django管理添加页面

如何替换django管理添加页面,django,django-admin,Django,Django Admin,我正在使用Django 1.4和Grappelli 我需要一个管理员添加页面,这是完全不同的改变页面上相同的模式。不同的字段集、不同的只读_字段(实际上没有用于添加)、不同的内联线(实际上没有用于添加)。 当它被提交时,我需要将它引导到工厂函数,而不是沿着正常的创建路径。 但我需要它的外观和行为像一个管理页面,我特别需要外键选择器,就像我在一个正常的管理页面 我尝试了一段时间来处理get_readonly_字段和朋友,但是get_inline_实例仅为1.5,我找不到另一个用于删除内联线的钩子

我正在使用Django 1.4和Grappelli

我需要一个管理员添加页面,这是完全不同的改变页面上相同的模式。不同的字段集、不同的只读_字段(实际上没有用于添加)、不同的内联线(实际上没有用于添加)。 当它被提交时,我需要将它引导到工厂函数,而不是沿着正常的创建路径。 但我需要它的外观和行为像一个管理页面,我特别需要外键选择器,就像我在一个正常的管理页面

我尝试了一段时间来处理get_readonly_字段和朋友,但是get_inline_实例仅为1.5,我找不到另一个用于删除内联线的钩子

然后,我尝试使用get_url替换视图和表单,但我无法确定需要进入上下文中哪些内容才能使模板呈现

我还尝试过处理get_表单,但是ModelAdmin仍然希望表单具有相同的字段


其中一个方向正确吗?有人知道我需要做什么吗?

您可以通过将ModelAdmin的form属性设置为自己的form类来覆盖admin表单

例如,请参见:


因此,最终有效的方法是创建一个常规表单(而不是模型表单),其中包含我希望显式实例化的特定字段

然后我将ModelAdmin.add_视图从django.contrib.admin.options复制到我的ModelAdmin中,然后我对副本进行了大量的修改,其中一半的代码是用于内联的,所以这就结束了,剩下的一半是关于保存的,我也不需要

在剩余的位中,您至少要查找并替换字段集、只读_字段、表单和标题

最后,我使用get_url将add url重定向到我的新视图

这种方法的优点是有一点重新分解,它可以用于在管理系统中的任何地方弹出通用输入表单


一个简单的图形,要让自动完成和相关的查找运行,您需要在某个对象上指定自动完成的查找字段和/或相关的查找字段,并将该对象作为模型管理员传递给helpers.AdminForm,通常这将是您的模型管理员,但它似乎并不关心对象实际是什么,所以我把它们放在表单上并传递了它。

你也可以覆盖表单模板:我如何覆盖它只是为了添加,而不是为了更改。事实上,我可以用get\u表单,但这只是问题的一小部分。您的意思是覆盖save方法吗?一旦您创建了自定义表单并将其添加到admin,您就可以将def save函数添加到from,即def save(self,force_insert=False,force_update=False)。例如:
class PersonForm(forms.ModelForm):

    class Meta:
        model = Person
        exclude = ['name']

class PersonAdmin(admin.ModelAdmin):
    exclude = ['age']
    form = PersonForm