모델의 레코드/개체 수를 장고 관리 모듈의 주 모델 목록에 표시하는 깔끔한 방법이 있습니까?django 관리자의 모델에 대한 총 레코드 수를 표시하는 방법
list_display 페이지에서 세트 내의 관련 오브젝트 수를 표시하는 기술을 찾았지만 (동일한 페이지의 하단에있는 페이지 매김 섹션에서 총계를 볼 수 있음) 표시 할 수있는 깔끔한 방법을 찾지 못했습니다. 모델 목록 수준의 레코드 수.
모델의 레코드/개체 수를 장고 관리 모듈의 주 모델 목록에 표시하는 깔끔한 방법이 있습니까?django 관리자의 모델에 대한 총 레코드 수를 표시하는 방법
list_display 페이지에서 세트 내의 관련 오브젝트 수를 표시하는 기술을 찾았지만 (동일한 페이지의 하단에있는 페이지 매김 섹션에서 총계를 볼 수 있음) 표시 할 수있는 깔끔한 방법을 찾지 못했습니다. 모델 목록 수준의 레코드 수.
나는 models.Manager 클래스를 살펴볼 것이다. Manager의 하위 클래스를 사용하면 모델에 테이블 수준 기능을 추가 할 수 있습니다. 관리자 메소드는 원하는 데이터를 반환 할 수 있으며 흥미로운 예가 Django DB API documentation입니다. 그런 다음 관리자 내부 클래스를 모델에 추가하여이를 관리자로 가져올 수 있습니다.
메인 관리자 페이지에 모델 수를 추가하는 좋은 방법이 없었지만, 여기에 내가 마침내 사용하는 솔루션이 있습니다.
간단히 말해 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)
, 난 당신이 더 일반적인 솔루션이를 변환하는 것이 좋습니다.
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 %}
이이 유스 케이스에 잘 맞습니다. 끝났어!
장고 관리에서 등록 된 모든 모델의 수를 가져 오시겠습니까? – dzida
필요는 없습니다. 특히 관심이있는 것이 있습니다. – Rog
궁금한 점은 어떻게 마침내 문제를 해결 했습니까? –