咨询ModelAdmin的change URL使用示例及文档内容解析
Django ModelAdmin Change URL 问题解答
1. ModelAdmin Change URL 使用示例及调用结果
代码层面生成URL
在Python代码(比如视图、信号处理逻辑)中,可通过reverse函数生成指定模型实例的编辑URL:
from django.urls import reverse # 示例:编辑polls应用中id为1的Choice实例 choice_id = 1 # 方式1:位置参数传递实例ID change_url = reverse('admin:polls_choice_change', args=[choice_id]) # 方式2:关键字参数传递实例ID change_url = reverse('admin:polls_choice_change', kwargs={'object_id': choice_id})
生成的URL格式通常为 /admin/polls/choice/1/,具体路径取决于你的AdminSite配置。
模板中生成URL
在Django模板里,可直接用模板标签生成:
<!-- 假设模板上下文包含choice实例 --> <a href="{% url 'admin:polls_choice_change' choice.id %}">编辑该选项</a>
调用URL后的结果
访问生成的URL后,会进入Django Admin的模型实例编辑页面:
- 页面渲染该实例的配置字段表单(字段由
ModelAdmin的fields/fieldsets定义),并预填实例当前的数据库数据。 - 顶部提供操作按钮:保存、保存并继续编辑、保存并添加另一个、删除。
- 提交表单后,数据库中对应实例的数据会更新;根据点击的按钮,会重定向到模型列表页、当前编辑页或新增实例页。
2. 官方文档内容解析
这将找到admin应用的第一个已注册实例(无论实例名称是什么),并解析为该实例中用于修改poll.Choice实例的视图。
这段内容针对Django多AdminSite实例场景,拆解说明:
- admin应用的第一个已注册实例:Django允许创建多个
AdminSite实例(比如默认的admin.site,以及自定义的custom_admin = AdminSite(name='custom_admin'))。系统会按注册顺序取第一个实例——默认情况下就是Django自动创建的admin.site,除非你在它之前注册了自定义实例。 - 无论实例名称是什么:不管这个
AdminSite实例的name参数设置为何值(比如默认的admin,自定义的backend_admin),只要它是第一个被注册的,就会被选中用于生成URL。 - 解析为该实例中用于修改poll.Choice实例的视图:最终生成的URL会指向这个
AdminSite实例下,poll应用中Choice模型的编辑视图(对应Django内部的change_view方法),也就是该Admin实例管理的Choice模型编辑页面。
内容的提问来源于stack exchange,提问作者kubaSpolsky
相关产品推荐
相关产品推荐

