【发布时间】: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)>]>
有人能解释一下吗?
【问题讨论】: