2

我已按照 django-guardian 文档中的用户指南设置 django-guardian。这使我可以控制一个小组是否可以查看特定课程。这是来自 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'),
        )

这(以及 django-guardian 文档示例中的其他代码)允许我通过 django 管理员授予特定用户和组“查看任务”的权限。问题是我想根据客户是谁来限制哪些任务组可以看到。例如,只有分配给客户 A 的顾问才能看到 task.customer = 'A' 的任务。有没有办法设置它?

任何帮助深表感谢。

4

1 回答 1

2

这可以通过 django-guardian 轻松实现,它只需要代表您进行更多编码。

例如,要限制视图在管理更改列表中返回哪些记录:

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'))

同样,您可以在任何常规视图中执行此操作。

于 2016-07-04T05:38:35.963 回答