这应该是一个非常简单的问题,但我一直在从DRF文档中提取空白。
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, ]
...
我希望每个登录用户都能够对此视图集进行GET和POST。唯一的限制是,非员工用户需要将值保持在100
以下,如下所示:
if request.data['value'] > 100 and not request.user.is_staff:
raise PermissionDeniedValidationErrorWhatareyoudoing("Santaz gonna know")
我的问题归结为:
这是自定义验证器或权限的作业吗?
权限问题是DRF(特别是mixins.CreateModelMixin
)会愉快地保存POSTed数据而不检查权限。仅在稍后查阅权限(调用get_object()
时,AFAICS)。
验证器的问题在于他们无法访问request
,尝试在request
注入似乎有点过分。
我错过了什么?
P.S。
同样的限制也应适用于PUT
和PATCH
。
答案 0 :(得分:1)
这是自定义验证器或权限的作业吗?
这是一项验证工作。
验证者可以通过DiscCode = string.Join(", ", discs.Select(d => (string)d["@Code"]))
方法访问常规上下文。见using set_context