我正在尝试弄清楚如何处理自定义列表权限。
我最好用例子来解释,所以我编造了这个场景来解释我的问题。
假设我有一个 User
型号,以及 User
有一个 ForeignKey
到 Bank
, 一个 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
如果我将 View 设置为 queryset = Bank.objects.all()
我去/banks
,我仍然可以看到关闭的银行(这不是我想要的)。如果我去 /banks/<pk>
,我将收到一条需要身份验证的消息(这很好)。
因此,如果我将 View 设置为 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
关于python - Django REST Framework 中的自定义列表权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20931227/