2016-07-04 3 views
1

장고 보호자 문서에서 장고 보호자를 설정하기 위해 사용자 안내서를 따라했습니다. 이것은 그룹이 특정 클래스를 볼 수 있는지 여부를 제어 할 수있는 가능성을 제공합니다. 이것은 (장고 - 보호자 문서의 예에서 다른 코드와 함께) 나 특정 사용자와 그룹 권한을 "제공 할 수 있습니다Django-Guardian - 그룹 액세스 제한

class Task(models.Model): 
    summary = models.CharField(max_length=32) 
    content = models.TextField() 
    customer = models.CharField(max_length=80) 
    reported_by = models.ForeignKey(User) 
    created_at = models.DateTimeField(auto_now_add=True) 

    class Meta: 
     permissions = (
      ('view_task', 'View task'), 
     ) 

:이 추가 된 필드 장고 - 보호자 문서에서 예제 (고객)입니다 보기 작업 "장고 관리자를 통해. 문제는 그룹이 고객이 누구인지에 따라 볼 수있는 작업을 제한하고자한다는 것입니다. 예를 들어 고객 A에게 할당 된 컨설턴트 만 task.customer = 'A'를 볼 수 있습니다. 그것을 설정하는 방법이 있습니까?

도움을 주시면 감사하겠습니다.

답변

1

이것은 장고 가디언을 사용하면 쉽게 달성 할 수 있습니다. 사용자를 대신하여 좀 더 코딩해야합니다. 예를 들어

은 관리자 변경 목록에서보기 수익률을 기록하는 제한합니다 :

from django.contrib import admin 
from myapp import models 
from guardian.shortcuts import get_objects_for_user 


@admin.register(models.Task) 
class TaskAdmin(admin.ModelAdmin): 
    # ... 
    def get_queryset(self, request): 
     qs = super(TaskAdmin, self).get_queryset(request) 
     tasks = get_objects_for_user(request.user, 'myapp.view_task', klass=models.Task) 
     return qs.filter(task_id__in=tasks.values_list('id')) 

Similary, 당신은 정규보기에서이 작업을 수행 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 불행히도 오류 메시지가 나타납니다. "AlreadyRegistered를 발생시킵니다 ('% s 모델은 이미 등록되었습니다'% model .__ name__) django.contrib.admin.sites.AlreadyRegistered : 모델 작업이 이미 등록되었습니다. – Wessi

+1

환영합니다. 이것은 특정 모델에 대한 ModelAdmin을 다른 곳에서 등록했다는 것을 알려줍니다. 변경 사항을 수정하거나 다시 등록하기 전에 등록을 취소해야합니다. 그러나 이것은 완전히 다른 문제입니다. – Wtower

+0

실수를 발견했습니다. 내 잘못이야. 감사. 그러나 이제는 다른 오류가 발생합니다 : "FieldError at/admin/app/task/ 키워드 'task'을 필드로 해결할 수 없습니다. 선택 사항 : summary, content, customers, reported_by, created_at" – Wessi