동일한 모델에 대해 하나 이상의 ModelAdmin을 만들 수 있습니까? 각 모델은 다르게 사용자 정의되고 다른 URL에 연결되어 있습니까?Django에서 동일한 모델에 대한 여러 개의 ModelAdmins/views
Posts라고하는 장고 모델이 있다고 가정 해 보겠습니다. 기본적으로이 모델의 관리자보기에는 모든 Post 객체가 나열됩니다.
은 내가 list_display 같은 변수를 설정하거나과 같이 내 ModelAdmin에 queryset
방법을 대체하여 다양한 방법으로 페이지에 표시된 개체의 목록을 사용자 정의 할 수 있습니다 알고 : 기본적으로
class MyPostAdmin(admin.ModelAdmin):
list_display = ('title', 'pub_date')
def queryset(self, request):
request_user = request.user
return Post.objects.filter(author=request_user)
admin.site.register(MyPostAdmin, Post)
,이 액세스 할 것 URL은 /admin/myapp/post
입니다. 그러나 동일한 모델의 ModelAdmins 여러보기를 갖고 싶습니다. 예 : /admin/myapp/post
은 모든 게시 개체를 나열하고 /admin/myapp/myposts
은 해당 사용자의 모든 게시물을 나열하고 /admin/myapp/draftpost
은 아직 게시되지 않은 모든 게시물을 나열 할 수 있습니다. (이것들은 단지 예일뿐입니다. 실제 사용 사례는 더 복잡합니다.)
동일한 모델에 둘 이상의 ModelAdmin을 등록 할 수 없습니다 (이 경우는 AlreadyRegistered
예외가됩니다). 이상적으로는없이 모든 모델을 단일 ModelAdmin 클래스에 넣고 URL에 따라 다른 쿼리 세트를 반환하는 자체 'urls'함수를 작성하지 않고이 을 얻고 싶습니다.
Django 소스를 살펴 봤는데 ModelAdmin.changelist_view
과 같은 기능이 내 urls.py에 포함되어있을 수 있지만 정확히 어떻게 작동하는지 확신 할 수 없습니다.
업데이트 : 내가 원하는 것을 수행하는 한 가지 방법을 찾았지만 (아래 참조) 여전히 다른 방법을 듣고 싶습니다.
이것은 굉장합니다. 나는 프록시 사이트가 관리 사이트에 등록 될 수 있다는 것을 몰랐다. 이것은 실제로 나를 크게 도울 것입니다. –
django에서 두 번 같은 모델을 등록 할 필요가있었습니다. 관리자 및 프록시 모델이 작동하는 것 같습니다. 하지만 권한 시스템에 문제가 하나 발견되었습니다. 참조 : http://code.djangoproject.com/ticket/11154 – bjunix
ModelAdmin 쿼리 세트 대신 기본 관리자를 변경하는 것도 좋은 생각입니다. 따라서 프록시 모델의 동작은 관리자 외부에서도 일관됩니다. – bjunix