我正在尝试解决如何处理自定义列表权限的问题。
我最好通过示例来解释,因此我编写了这个场景来解释我的问题。
假设我有一个 User
模型,User
有一个指向 Bank
的 ForeignKey
,Bank
可以打开(或不打开)。
我设置了权限,只有在 Bank
打开时才可以允许读取请求,
此外,任何人都可以创建 User
对象(例如,只有管理员用户才能创建 Bank
)。 因此,我的 Bank
权限如下:
def has_object_permission(self, request, view, obj):
if request.method in permissions.SAFE_METHODS
return obj.opened
return True
如果我将视图设置为
queryset = Bank.objects.all()
,当我进入
/banks
时,我仍然可以看到关闭的银行(这不是我想要的)。如果我进入/banks/<pk>
,我会收到需要身份验证的消息(这很好)。所以,如果我将视图设置为
queryset = Bank.objects.filter(opened=True)
,当我进入
/banks
时,只有已开放的银行被列出。这里是棘手的部分, 如果我继续创建用户,由于
Bank
是一个ForeignKey
,在API浏览器中,我仍然可以看到所有可用的银行列表,无论是否开放。如何修复它,以便只显示已经开放的银行?希望我的例子足够清楚。谢谢!