需要在Django管理界面上显示用户计数其他数据计数

时间:2018-12-03 09:58:51

标签: django django-templates django-views django-admin

我为Django管理员创建了自定义index.html。这是ScreeenShot enter image description here

这里的用户或模型1的计数是静态的。我想从数据库更新。有什么方法可以将变量从admin.py传递到主管理界面?

有什么方法可以更改索引,就像我们可以对某些模型进行更改一样:-

class UserAdmin(DjangoUserAdmin):
"""Define admin model for custom User model with no email field."""

fieldsets = (
    (None, {'fields': ('email', 'password')}),
    (_('Personal info'), {'fields': ('first_name', 'last_name','Mobile_number','Address','avatar','AI','U_ID')}),
    (_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser',
                                   'groups', 'user_permissions')}),
    (_('Important dates'), {'fields': ('last_login', 'date_joined')}),
)
add_fieldsets = (
    (None, {
        'classes': ('wide',),
        'fields': ('email', 'password1', 'password2'),
    }),
)
list_display = ('email', 'first_name', 'last_name', 'is_staff','Mobile_number','Address','avatar','AI','U_ID')
search_fields = ('email', 'first_name', 'last_name','Mobile_number','Address','avatar','AI','U_ID')
ordering = ('email',)

1 个答案:

答案 0 :(得分:1)

一个想法是使用自定义 context-processor。您可以添加一个新的上下文处理器,如下所示:

# in context_processor.py

def user_count(request):
   return { 'total_user' : User.objects.all().count() }

settings.py配置中的TEMPLATE中注册它:

   'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
            'your_app.context_processor.user_count'
        ],
    },

在模板中使用它:

<div>
    {{ user_count }}
</div>

仅供参考

如果要在每个模板中显示相同的数据,

context-processor会很有帮助。但是,如果此数据仅用于一页,并且可能需要通过modeladmin发送额外的上下文数据,则change_view更适合于此。例如(从文档粘贴的副本):

class MyModelAdmin(admin.ModelAdmin):
    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().change_view(
            request, object_id, form_url, extra_context=extra_context,
        )