[PYTHON] 어떻게 사용자 정의 AdminSite 클래스를 사용합니까?
PYTHON어떻게 사용자 정의 AdminSite 클래스를 사용합니까?
내 자신의 django.contrib.admin.sites.AdminSite를 구현하는 가장 좋은 방법은 무엇입니까?
사실 나는 django.contrib.admin.autodiscover에서 INSTALLED_APPS의 등록에 문제가 있습니다. urls.py에서 내 사용자 지정 AdminSite 클래스를 사용하면 관리 페이지에 아무 앱도 표시되지 않습니다.
나는 이것을 litte hack으로 고쳤다. 나는이 수업을 썼다.
from django.contrib.admin.sites import site as default_site
class AdminSiteRegistryFix( object ):
'''
This fix links the '_registry' property to the orginal AdminSites
'_registry' property. This is necessary, because of the character of
the admins 'autodiscover' function. Otherwise the admin site will say,
that you havn't permission to edit anything.
'''
def _registry_getter(self):
return default_site._registry
def _registry_setter(self,value):
default_site._registry = value
_registry = property(_registry_getter, _registry_setter)
그리고 다음과 같이 내 사용자 지정 AdminSite를 구현하십시오.
from wltrweb.hacks.django.admin import AdminSiteRegistryFix
from django.contrib.admin import AdminSite
class MyAdminSite( AdminSite, AdminSiteRegistryFix ):
# do some magic
pass
site = MyAdminSite()
그래서 나는 urls.py를 위해이 사이트를 사용할 수있다.
누구든지 더 좋은 방법을 알고 있습니까? 밑줄로 시작하는 var에 액세스하기 때문에 해킹 이상은 아닙니다. 나는 해킹을 좋아하지 않는다.
편집 : 또 다른 방법은 django.contrib.admin.autodiscover 함수를 다시 작성하는 것이지만이 경우에는 중복 코드가 생깁니다.
해결법
-
==============================
1.https://docs.djangoproject.com/en/1.10/ref/contrib/admin/#customizing-the-adminsite-class에서 인용
https://docs.djangoproject.com/en/1.10/ref/contrib/admin/#customizing-the-adminsite-class에서 인용
가장 명확한 접근 방법이라고 생각하지만 앱 admin.py 파일에서 등록 코드를 변경해야한다는 의미이기도합니다.
가정은 사용자 지정 관리 사이트 작성을 시작하면 거의 프로젝트별로 이루어지며 어떤 앱을 포함할지 미리 알 수 있습니다.
위의 해킹 작업을 원하지 않는다면이 두 가지 옵션 만 볼 수 있습니다. 모든 등록 호출을 사용자 정의 관리 사이트로 바꾸거나 adminsite 모듈에 명시 적으로 모델을 등록하십시오.
-
==============================
2.django.contrib.admin.AdminSite에서 파생 된 사용자 정의 클래스를 프로젝트의 관리 사이트에 사용하여 새 클래스로 모델을 등록하는 사용자 정의 등록 코드를 작성할 필요가 없습니다. 자신의 모델로 타사 앱을 사용할 때 모델이이 앱에서 추가되거나 제거 되었기 때문에 맞춤 등록 코드를 편집하지 않아도됩니다.
django.contrib.admin.AdminSite에서 파생 된 사용자 정의 클래스를 프로젝트의 관리 사이트에 사용하여 새 클래스로 모델을 등록하는 사용자 정의 등록 코드를 작성할 필요가 없습니다. 자신의 모델로 타사 앱을 사용할 때 모델이이 앱에서 추가되거나 제거 되었기 때문에 맞춤 등록 코드를 편집하지 않아도됩니다.
django.contrib.admin의 autodiscover 함수가 호출되기 전에 admin 사이트에 사용 된 기본 클래스로 만든 인스턴스를 자신의 클래스로 만든 인스턴스로 전환해야합니다. 나는 이것을 다음과 같이 행한다 :
-
==============================
3.Django 2.1부터는 'out-of-the-box'해결책이 있습니다 : https://docs.djangoproject.com/en/2.1/ref/contrib/admin/#overriding-the-default-admin-site
Django 2.1부터는 'out-of-the-box'해결책이 있습니다 : https://docs.djangoproject.com/en/2.1/ref/contrib/admin/#overriding-the-default-admin-site
from django.contrib import admin class MyAdminSite(admin.AdminSite): ...
커스텀 어드민 사이트를 교체하는 것은 이제 설치된 앱에 자신의 AdminConfig를 추가하여 수행됩니다.
from django.contrib.admin.apps import AdminConfig class MyAdminConfig(AdminConfig): default_site = 'myproject.admin.MyAdminSite'
INSTALLED_APPS = [ ... 'myproject.apps.MyAdminConfig', # replaces 'django.contrib.admin' ... ]
AdminConfig와 SimpleAdminConfig의 차이점에 유의하십시오. 여기서 Admin.autodiscover ()는 admin.autodiscover ()를 트리거하지 않습니다. 현재 프로젝트에서이 솔루션을 사용하고 있습니다.
from https://stackoverflow.com/questions/4877335/how-to-use-custom-adminsite-class by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] SciPy / Numpy를 사용하여 Python에서 희소 행렬 연결 (0) | 2018.10.23 |
---|---|
[PYTHON] 주어진 날짜와 가장 가까운 날짜 찾기 (0) | 2018.10.23 |
[PYTHON] python : [Errno 10054] 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다. (0) | 2018.10.22 |
[PYTHON] 한 객체의 장고 관리 페이지에서 관련 객체의 관리 페이지로 링크를 어떻게 추가합니까? (0) | 2018.10.22 |
[PYTHON] NumPy 배열의 요소 색인 (0) | 2018.10.22 |