我希望我的网站具有相同的功能,并通过对核心 django 系统进行轻微修改来添加它。
Step 1:首先,我们需要一种方法来指示哪些模型应该列出其属性。将以下代码添加到您想要列出实例的模型(在 models.py 中):
class Meta:
list_instances = True
Step 2:我们需要修改 Django 来识别和读取这个新属性。在 core-django 文件:db/models/options.py 中,大约在第 22 行将 'list_instances' 附加到 DEFAULT_NAMES:
DEFAULT_NAMES = ('verbose_name', 'verbose_name_plural', 'db_table', 'ordering',
'unique_together', 'permissions', 'get_latest_by',
'order_with_respect_to', 'app_label', 'db_tablespace',
'abstract', 'managed', 'proxy', 'auto_created', 'list_instances')
在同一个文件中,大约在第 52 行,在其他属性之后为此属性创建一个默认字段:
self.list_instances = False
Step 3:
我们需要将此信息传递给生成索引页的模板。在 core-django 文件:contrib/admin/sites.py 中,在 index() 方法内和“if has_module_perms:”部分内,添加以下代码:
instances = []
if (model._meta.list_instances == True):
instances = model_admin.queryset(None)
这将创建要显示的实例列表,但前提是设置了 list_instance 属性。在同一文件中,再往下几行,将这些值附加到“model_dict”构造中。
model_dict = {
'name': capfirst(model._meta.verbose_name_plural),
'admin_url': mark_safe('%s/%s/' % (app_label, model. __name__.lower())),
'perms': perms,
'list_instances':model._meta.list_instances,
'instances': instances,
}
Step 4:
最后一步是修改模板以支持这一点。编辑 core-django 文件 /contrib/admin/templates/admin/index.html 或将此文件复制到特定应用程序的 templates/admin/ 目录。在生成行的标准代码后面添加几行,以生成“子行”(如果适用)。大致在第 40 行,就在“/tr>”和“{% endfor %}”之间:
{% if model.list_instances %}
{% for instance in model.instances %}
<tr>
<td colspan="2" style="padding-left: 2em;">{{ instance }}</td>
{% if model.perms.change %}
<td><a href="{{ model.admin_url }}{{ instance.id }}/" class="changelink">{% trans 'Change' %}</a></td>
{% else %}
<td> </td>
{% endif %}
</tr>
{% endfor %}
{% endif %}
这将导致该项目以由生成的名称列出unicode模型中的 () 方法。
Step 5:
你瞧!它应该看起来像这样:
Edit:
可选步骤 6:
如果您希望实例名称也可单击,只需更改模板(index.html)并替换:
<td colspan="2" style="padding-left: 2em;">{{ instance }}</td>
with:
<td colspan="2" style="padding-left: 2em;">
{% if model.perms.change %}
<a href="{{ model.admin_url }}{{ instance.id}}">{{ instance }}</a>
{% else %}
{{ instance }}
{% endif %}
</td>