2013-10-09 7 views
0

여기 내 models.py입니다 관리 사이트에 대한 사용 권한을 나열하지 않습니다. 각 항목에는 여러 유형의 태그가 있습니다. 현재 팀 태그, 주제 태그, 관리 태그 및 특수 태그의 네 가지 유형이 있습니다. 결국에는 아마 몇 가지 더있을 것입니다.동적으로 생성 된 프록시 모델

아이디어는 모두 기본적으로 동일한 필드를 가지고 있기 때문에 manytomany 관계가있는 4 개의 테이블을 갖는 대신 새로운 유형을 추가 할 때마다 Item에 대한 새 열을 추가하는 대신 모두을 '태그 '스키마를 변경하지 않고 새로운 유형을 추가하는 것은 매우 쉽습니다.

는 지금과 같은 ( this 기준) dyamically 생성 된 프록시 모델을 사용하고있어 admin.py에서이 문제를 처리하기 :

def create_modeladmin(modeladmin, model, name = None): 
    class Meta: 
     proxy = True 
     app_label = model._meta.app_label 

    attrs = {'__module__': '', 'Meta': Meta} 

    newmodel = type(name, (model,), attrs) 

    admin.site.register(newmodel, modeladmin) 
    return modeladmin 


class TagAdmin(models.Model): 
    def queryset(self): 
     return self.model.objects.filter(category_id = self.cid) 

class TeamAdmin(TagAdmin): 
    cid = 1 

class SubjectAdmin(TagAdmin): 
    cid = 2 
# ... and so on ... 

create_modeladmin(TeamAdmin, name='Teams', model=Tag) 
create_modeladmin(SubjectAdmin, name='Subject', model=Tag) 
#... and so on ... 

이 나를 위해 잘 작동합니다. 그러나 다른 직원은 다른 편집 권한이 필요합니다. 한 사람은 관리 태그에 액세스해서는 안되며, 다른 직원은 제목 태그와 팀 태그를 편집 할 수있는 권한 만 가져야합니다. 그러나 관리자 사이트에 관한 한 동적 모델 은 허가 목록에 없기 때문에 누구에게도 권한을 부여 할 수 없습니다. 여전히 동적 모델 중 하나를 편집 액세스 할 수 없습니다 목록에 대한 모든 권한을 부여, 사용자, 그리고 사람이 전혀 액세스 할 수있는 유일한 방법 즉

그에게 분명히 점을 무시 슈퍼 유저를 제공하는 것입니다

나는 SO와 웹을 검색해 비슷한 문제가있는 사람은 아무도 없을 수 있으며 문서는 dynamic models section이나 proxy models section이 아니라고 말하지 않습니다. 그래서 저는 이것이 다른 종류의 문제라고 생각합니다. 어떤 도움을 크게 그래서에 몇 가지 조사 후, 대답은 아주 간단했다

UPDATE를 감상 할 수있다. django의 권한은 데이터베이스에 저장된 객체이기 때문에 필자가해야 할 일은 간단했다. 관련 권한을 추가하고 새로운 ContentType 객체를 db에 작성한 다음 사람들에게 특정 저작물을 제공 할 수 있었다.

그러나 이것은 새로운 질문을 던졌습니다. create_modeladmin 내에서 사용 권한을 만드는 함수를 find_or_create 종류의 함수 (기본적으로 매번 실행 됨)로 사용하거나 외부 스크립트로 사용해야하는 것이 좋습니다. 새로운 동적 모델을 추가 할 때마다 한 번 실행해야합니다 (syncdb와 유사).

또한 동적으로 사용 권한을 만들 수있는 방법이 있습니까 (이상적이며 가장 적합한 솔루션처럼 보입니다)? 권한을 만들 수 있습니다 물론

+0

을 할 django.contrib.auth.management.create_permissions 있습니다 http://blog.muhuk.com/2009/05/14/django-permission-system.html# .UmBEJ1CGqNo 아마도 내가 가리키는 동적 프록시 모델을 만드는 것보다 내 자신의 Permission 객체를 만드는 생각을하기 시작했습니다. 해킹처럼 보이지만 여기서 내가 찾는 방향은 – yuvi

+0

과 비슷할 수 있습니다. http://stackoverflow.com/questions/8096980/user-permissions-on-proxy-models-in-modeladmin – fastmultiplication

+0

스크립트를 만들었습니다. http : // stackoverflow.com/questions/5486018/django-how-to-make-model-admin-classes-show-up-in-available-permissions/20759563 # 20759563 – fastmultiplication

답변

-1

, 장고이보고, 또한이

관련 문제