2010-06-15 11 views
10

모델의 레코드/개체 수를 장고 관리 모듈의 주 모델 목록에 표시하는 깔끔한 방법이 있습니까?django 관리자의 모델에 대한 총 레코드 수를 표시하는 방법

list_display 페이지에서 세트 내의 관련 오브젝트 수를 표시하는 기술을 찾았지만 (동일한 페이지의 하단에있는 페이지 매김 섹션에서 총계를 볼 수 있음) 표시 할 수있는 깔끔한 방법을 찾지 못했습니다. 모델 목록 수준의 레코드 수.

+0

장고 관리에서 등록 된 모든 모델의 수를 가져 오시겠습니까? – dzida

+0

필요는 없습니다. 특히 관심이있는 것이 있습니다. – Rog

+0

궁금한 점은 어떻게 마침내 문제를 해결 했습니까? –

답변

3

나는 models.Manager 클래스를 살펴볼 것이다. Manager의 하위 클래스를 사용하면 모델에 테이블 수준 기능을 추가 할 수 있습니다. 관리자 메소드는 원하는 데이터를 반환 할 수 있으며 흥미로운 예가 Django DB API documentation입니다. 그런 다음 관리자 내부 클래스를 모델에 추가하여이를 관리자로 가져올 수 있습니다.

1

메인 관리자 페이지에 모델 수를 추가하는 좋은 방법이 없었지만, 여기에 내가 마침내 사용하는 솔루션이 있습니다.

간단히 말해 post_delete 및 post_save 메소드 신호에서 각 모델의 수를 계산하고 사용자 정의 요청 (맵에)에 변수를 저장하고 확장 관리자 인 index.html에 if를 각각 점검하여 표시합니다 원하는 모델.

확장 템플릿/관리/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 %} 

내 사용자 요청에 폴더의 유틸리티/context_processors.py :

settings.py에서
from myproject import settings 

def myproject(request): 
    return { 
     'request' : request, 
     'MODELS_COUNT' : settings.MODELS_COUNT 
    } 

:

MODELS_COUNT = { 
     'Mymodel1': None, 
     'Mymodel2': None  
} 

TEMPLATE_CONTEXT_PROCESSORS = (
    ... 
    'myproject.util.context_processors.myproject', 
) 

N 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) 

, 난 당신이 더 일반적인 솔루션이를 변환하는 것이 좋습니다.

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() 

그런 다음 "장고의있는 contrib/관리/템플릿/index.html을"에서와 재정의 "/templates/admin/index.html"를 복사합니다. 상단 추가에서

:

{% load NAME_OF_YOUR_TAG_FILE %} 

모델 이름 또는 어디든지 후에 다음 호출을 추가 :

{% get_model_count model.admin_url %} 

이이 유스 케이스에 잘 맞습니다. 끝났어!

관련 문제