【问题标题】:How can I limit ModelAdmin queryset to user-editable items when using object permissions?使用对象权限时,如何将 ModelAdmin 查询集限制为用户可编辑的项目?
【发布时间】:2010-05-23 14:11:18
【问题描述】:

我正在尝试实现 Florian 在他关于 Django Advent 的文章中的 object permissions system,但我遇到了一个问题,试图将返回的查询集限制为仅用户有权编辑/查看的项目。 Florian 在他关于包装管理员的部分中提到了它,但跳过了它。我看不到过滤查询集的好方法。我错过了什么吗?

【问题讨论】:

    标签: django django-models django-admin


    【解决方案1】:

    当你这样做时:

    class ObjectPermission(models.Model):
        user = models.ForeignKey(User)
        can_view = models.BooleanField()
        can_change = models.BooleanField()
        can_delete = models.BooleanField()
    
        content_type = models.ForeignKey(ContentType)
        object_id = models.PositiveIntegerField()
    

    您可以通过这种方式过滤您的查询集(在您的方法查询集中):

    def queryset(self, request):
        qs = super(YourModelAdmin, self).queryset(request)
        op = ObjectPermission.objects.filter(user=request.user, can_change=True, content_type=ContentType.objects.get_for_model(YourModel)).values_list('object_id').distinct()
        qs = queryset.filter(id__in=[id[0] for id in op])
        return qs 
    

    【讨论】:

    • 这并不能解决我的问题。我知道如何自定义管理查询集,但我无法理清在 Florian 的对象权限实现中需要使用的实际查询语法。
    • 布鲁克斯,对不起,我误解了这个问题,但我修正了我的答案
    猜你喜欢
    • 2013-11-19
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    相关资源
    最近更新 更多