0
这应该是一个非常简单的问题,但我始终从DRF文档中绘制空白。拒绝某些用户的某些POST
models.py:
class DataPoint(models.Model):
value = models.IntegerField()
...
serializers.py:
class DataPointSerializer(serializers.ModelSerializer):
class Meta:
model = DataPoint
fields = ('value', ...)
views.py:
class DataPointViewSet(viewsets.ModelViewSet):
queryset = DataPoint.objects.all()
serializer_class = DataPointSerializer
permission_classes = [permissions.IsAuthenticated, ]
...
我希望每一个登录的用户能够得到和发布到此视图集。唯一的限制是,非员工用户需要保持低于100
值,像这样:
if request.data['value'] > 100 and not request.user.is_staff:
raise PermissionDeniedValidationErrorWhatareyoudoing("Santaz gonna know")
我的问题归结为:
这是一个自定义的验证或权限的工作吗?
有权限的问题是DRF(特别是mixins.CreateModelMixin
)将高兴地保存已发布的数据而不检查权限。只有稍后才会查询权限(当调用get_object()
时,AFAICS)。
验证器存在的问题是,他们无法访问request
,并且在那里尝试注入request
似乎是一种矫枉过正。
我错过了什么?
P.S.
同样的限制也应该适用于PUT
和PATCH
。