是否有一种简洁的方法可以让模型的记录/对象数出现在django管理模块的主模型列表中?
我已经找到了在list_display页面中显示集合中相关对象计数的技术(我可以看到底部的分页部分中的总数),但是没有看到一个简洁的方式来显示在模型列表级别记录计数。
答案 0 :(得分:3)
我会查看models.Manager类。 Manager的子类允许您向模型添加表级功能。 Manager方法可以返回您想要的任何数据,Django DB API documentation中有一个有趣的示例。然后,您可以通过向模型添加管理内部类来将其拉入管理员。
答案 1 :(得分:3)
from django import template
from django.db.models.loading import get_model
register = template.Library()
@register.simple_tag()
def get_model_count(admin_url):
app_label, model_name = admin_url.split('/')[:2]
return get_model(app_label, model_name, seed_cache=False).objects.count()
然后从“django的contrib / admin / templates / index.html”复制并覆盖“/templates/admin/index.html”。
在顶部添加:
{% load NAME_OF_YOUR_TAG_FILE %}
在型号名称后面的地方添加以下调用:
{% get_model_count model.admin_url %}
这非常适合这个用例。你做完了!
答案 2 :(得分:1)
我没有找到任何在主管理页面中添加模型数量的好方法,但这是我最终使用的解决方案。
简而言之,我用post_delete和post_save方法计算每个模型的计数,将变量存储在自定义请求中(在地图中),并通过简单地检查每个所需的if来在扩展的admin index.html中显示它们模型。
扩展 templates / admin / index.html :
{% if model.perms.change %}
<th scope="row"><a href="{{ model.admin_url }}">{{ model.name }}
{% if model.name == "Mymodel1_verbose_name_plural" %} ({{ MODELS_COUNT.Mymodel1}}) {% endif %}
</a></th>
{% else %}
我在util / context_processors.py中的自定义请求:
from myproject import settings
def myproject(request):
return {
'request' : request,
'MODELS_COUNT' : settings.MODELS_COUNT
}
在我的 settings.py :
中MODELS_COUNT = {
'Mymodel1': None,
'Mymodel2': None
}
TEMPLATE_CONTEXT_PROCESSORS = (
...
'myproject.util.context_processors.myproject',
)
在 myproject .__ init __。py :
from django.db.models.signals import post_save, post_delete
def save_mymodel1_count(sender, instance=None, **kwargs):
if kwargs['created']:
settings.MODELS_COUNT['Mymodel1'] = Mymodel1.objects.count()
def delete_mymodel1_count(sender, instance=None, **kwargs):
settings.MODELS_COUNT['Mymodel1'] = Mymodel1.objects.count()
settings.MODELS_COUNT['Mymodel1'] = Mymodel1.objects.count()
post_save.connect(save_mymodel1_count, sender=Mymodel1)
post_delete.connect(delete_mymodel1_count, sender=Mymodel1)
如果您有很多型号,我建议您使用更通用的解决方案进行转换。