【问题标题】:Wagtail: How to use view_restrictions in ModelAdmin to filter query set?Wagtail:如何在 ModelAdmin 中使用 view_restrictions 过滤查询集?
【发布时间】:2020-08-15 14:17:44
【问题描述】:

我正在尝试通过Privat Pages 和关联的PageViewRestriction 模型管理对Wagtail 管理员中某些PageModel 页面的访问,使用this post 作为参考:

class MyAdmin(ModelAdmin):
    model = MyPage
    [ ... ]
    def get_queryset(self, request):
        qs = super().get_queryset(request)
        user = request.user
        [ ... ]
        elif user.is_client:
            return qs.filter(
                Q(view_restrictions__restriction_type='groups', view_restrictions__groups__in=user.groups.all())
            )
        return None

没有返回,所以我检查了 shell:

qs = MyPage.objects.all()
qs.first().get_view_restrictions()
>>> <QuerySet [<PageViewRestriction: PageViewRestriction object (2)>]>

qs.first().get_view_restrictions().first().groups.all()
>>> <QuerySet [<Group: MyGroup>]>

因此设置了限制,但尝试与上面相同的查询返回一个空的 qs:

my_user.groups.all()
>>> <QuerySet [<Group: MyGroup>]

qs.filter(Q(view_restrictions__restriction_type='groups', view_restrictions__groups__in=my_user.groups.all()))
>>> <PageQuerySet []>

让我更加困惑的是MyPage 实例上的view_restrictions 字段为空,但get_view_restrictions 方法返回预期对象。

qs.first().specific.view_restrictions.all()
>>> <QuerySet []>

qs.first().specific.get_view_restrictions()
>>> <QuerySet [<PageViewRestriction: PageViewRestriction object (2)>]>

有人能解释一下吗?

【问题讨论】:

    标签: python django wagtail


    【解决方案1】:

    我从 Wagtail 方面得到了一些反馈,目前归档我想要的内容似乎“有点棘手”。 view_restrictions 是空的,因为限制是在祖先页面上设置的并沿树向下传播。

    不过,有一个 PR 在工作中,它解决了我的用例

    【讨论】:

      猜你喜欢
      • 2019-10-16
      • 2016-12-12
      • 2017-08-06
      • 2017-05-24
      • 1970-01-01
      • 2018-06-18
      • 1970-01-01
      • 2016-02-01
      • 1970-01-01
      相关资源
      最近更新 更多