2012-08-10 3 views
4

Django 관리자에서 사용자 기반의 특정 행만 표시하려고합니다. 사용자 관리자 사이트에 로그 및 샌프란시스코 location의 일부입니다, 그들은 해당 위치에 Articles을 볼 수 있어야합니다 그래서 Django 관리자 권한으로 필터 행

class Article(models.Model): 
    text =   models.TextField(max_length=160) 
    location =  models.CharField(max_length=20) 

. custom ModelAdmin ( admin.py에서)와

답변

6

나는 당신이 원하는 것은 ModelAdmin의 검색어 세트라고 생각합니다 프로필 모델을 통해 위치에 연결됩니다.

1

사용 has_add_permission, has_change_permissionhas_delete_permission :

https://docs.djangoproject.com/en/1.4/ref/contrib/admin/#django.contrib.admin.ModelAdmin.queryset

class ArticleAdmin(admin.ModelAdmin): 
    def queryset(self, request): 
     qs = super(ArticleAdmin, self).queryset(request) 
     if request.user.profile.location: # If the user has a location 
      # change the queryset for this modeladmin 
      qs = qs.filter(location=request.user.profile.location) 
     return qs 

이 사용자를 가정

class ArticleAdmin(admin.ModelAdmin): 
    def has_add_permission(self, request): 
     # Nothing really to do here, but shown just to be thorough 
     return super(ArticleAdmin, self).has_add_permission(request) 

    def has_change_permission(self, request, obj=None): 
     if obj is not None: 
      return obj.location == request.user.get_profile().location 
     else: 
      return super(ArticleAdmin, self).has_change_permission(request, obj=obj) 

    def has_delete_permission(self, request, obj=None): 
     if obj is not None: 
      return obj.location == request.user.get_profile().location 
     else: 
      return super(ArticleAdmin, self).has_delete_permission(request, obj=obj) 
admin.site.register(Article, ArticleAdmin) 
관련 문제