2016-07-12 3 views
1

django 프로젝트에 대한 사용자 지정 작업을 작성했지만 수퍼 유저 만 사용 가능하게 만드는 방법은 없습니다. Users.is_superuser를 사용하여 if 문을 실행 줄에 넣으려고했지만 is_superuser라는 특성이 없다는 오류가 계속 발생합니다.Django 관리자 권한에 대한 사용 권한

from django.contrib import admin 
from models import Art, Agent, UserProfile 
from django.contrib import admin 
from django.contrib.auth.models import Group, User, AbstractUser 
from django.contrib.auth import * 
from import_export import resources 
from import_export.admin import ImportExportModelAdmin 

#admin.site.unregister(Group) 

def approve_art(modeladmin, request, queryset): 
    queryset.update(authenticate = "approved") 

def reject_art(modeladmin, request, queryset): 
    queryset.update(authenticate = "rejected") 

# Add in this class to customized the Admin Interface 
class ArtAdmin(ImportExportModelAdmin): 
    list_display = ['id', 'identification', 'name', 'artist', 'category', 'type', 'agent', 'authenticate', ] 
    search_fields = ('name', 'category', 'artist', 'id', 'authenticate',) 

    actions = [approve_art, reject_art] 
    list_filter = ["authenticate"] 




class AgentAdmin(admin.ModelAdmin): 
    list_display = ['id', 'name', 'phone', 'postcode', ] 
    search_fields = ('name', 'id',) 

class ArtResource(resources.ModelResource): 

    class Meta: 
     model = Art 

# Update the registeration to include this customised interface 
admin.site.register(Art, ArtAdmin) 
admin.site.register(Agent, AgentAdmin) 
+1

'if'문을 추가 한 코드를 포함하십시오. –

+0

다른 것들을 시도 할 때 나는 라인을 꺼 냈습니다.하지만 액션이 시작되기 직전에 ArtAdmin 클래스에있었습니다. User.is_superuser : – Gary

답변

1

이 시도 :

class ArtAdmin(ImportExportModelAdmin): 
     list_display = ['id', 'identification', 'name', 'artist', 'category', 'type', 'agent', 'authenticate', ] 
     search_fields = ('name', 'category', 'artist', 'id', 'authenticate',) 
     list_filter = ["authenticate"] 
     actions = [approve_art, reject_art] 

     def get_actions(self, request): 
      actions = super(ArtAdmin, self).get_actions(request) 
      if not request.user.is_superuser: 
       del actions[approve_art] 
       del actions[reject_art] 
      return actions 

체크 아웃 https://docs.djangoproject.com/en/1.9/ref/contrib/admin/actions/#conditionally-enabling-or-disabling-actions 더 많은 정보를 원하시면

+0

먼저 부모 클래스'get_actions' 메서드를 호출해야합니다. actions = super (MyModelAdmin, self) .get_actions (request)'를 호출하고 다른 작업을 유지하기 위해 반환합니다. – sehrob

+0

내가 게시 한 직후에 그 알림이 업데이트되었습니다. – Written

0

당신이처럼 ModelAdmin의 get_actions 메소드를 오버라이드 (override) 할 수 있습니다 : (가) documentation materials 당신이보고 할 수 있습니다 여기에

def get_actions(self, request): 
    actions = super(MyModelAdmin, self).get_actions(request) 
    if request.user.is_superuser: 
      actions.update(dict(youraction=youraction)) 
    return actions 

다음은 내 admin.py 파일입니다.

0

에 대한 조치가 -dependant하지 ModelAdmin 것을 고려할 때, 가장 좋은 방법은 인증되지 않은 사용자의 유적에 의해 실행되는 것을 방지하기 위해 작업 내에서 확인하십시오 :

from django.core.exceptions import PermissionDenied 

def approve_art(modeladmin, request, queryset): 
    if not request.user.is_superuser: 
     raise PermissionDenied 
    queryset.update(authenticate = "approved") 

어느 것이 how django handles it for the delete_selected action입니다.

액션은 여전히 ​​드롭 다운 목록에서 계속 사용할 수 있지만 403 HTTP 코드를 반환합니다.

관련 문제