我说的不仅仅是表单或静态数据的自定义字段,我说的是添加一个实际上有自己代码的部分。字段集中的一种新条目,但它引入的不是新字段,而是一些关于用户活动的小报告。
实际上这个问题代表任何模型的更改页面。Django 文档向您展示了如何覆盖此页面的模板,但是不添加一些 python 代码有什么好处呢?
我说的不仅仅是表单或静态数据的自定义字段,我说的是添加一个实际上有自己代码的部分。字段集中的一种新条目,但它引入的不是新字段,而是一些关于用户活动的小报告。
实际上这个问题代表任何模型的更改页面。Django 文档向您展示了如何覆盖此页面的模板,但是不添加一些 python 代码有什么好处呢?
您可以覆盖默认模板和默认视图。
Django 有两种不同的视图和模板用于管理记录显示。一个用于创建一个新的,一个用于显示现有的并对其进行编辑。相关方法有:
这是如何准备相关覆盖视图的示例(取自添加/更改视图链接)
class MyModelAdmin(admin.ModelAdmin):
# A template for a very customized change view:
change_form_template = 'admin/myapp/extras/openstreetmap_change_form.html'
def get_osm_info(self):
# ...
pass
def change_view(self, request, object_id, form_url='', extra_context=None):
extra_context = extra_context or {}
extra_context['osm_data'] = self.get_osm_info()
return super(MyModelAdmin, self).change_view(request, object_id,
form_url, extra_context=extra_context)
您必须检查 django 源代码中的默认 django 添加和更改模板(可能将其复制为新模板并在之后进行编辑),以了解如何准备自定义模板。
最后一点,永远不要直接从源代码编辑 django 模板或查看代码,因为它们被许多不同的应用程序使用,并且更新到 django 源代码可能会覆盖您的编辑或可能导致问题。
除了覆盖模板之外,Django 管理员具有很强的可扩展性。
确保查看文档中的ModelAdmin 方法部分。您几乎可以修改 ModelAdmin 的任何行为。
您还应该查看自定义表单验证和ModelForms文档,因为附加到 ModelAdmin 的模型的自定义表单为您提供了另一个(在大多数情况下更深)级别的自定义。