Django REST 框架中的自定义列表权限



我正在尝试弄清楚如何处理自定义列表权限。

我用例子解释得最好,所以我编造了这个场景来解释我的问题。

假设我有一个User模型,并且User具有BankForeignKey,可以打开(或不打开)Bank

我已经设置了权限,只有在打开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浏览器中看到所有可供选择的银行的列表,无论是否打开。

如何修复它,以便仅显示已打开的银行?希望我的例子足够清楚。谢谢!

您可以覆盖用户序列化程序的bank字段:

class UserSerializer(serializers.ModelSerializer):
bank = serializers.PrimaryKeyRelatedField(queryset=Bank.objects.filter(opened=True))
class Meta:
model = User

最新更新