Django 为什么DRF跳过验证?

Django 为什么DRF跳过验证?,django,django-rest-framework,django-views,Django,Django Rest Framework,Django Views,我有一个这样的验证器:(是的,它是空的,并且引发了expection) 和序列化程序: class CampaignSerializer(CreatorModelSerializer): name = serializers.CharField(max_length=32, validators=[ AlphanumericValidator() ]) class Meta: model = Campaign fields

我有一个这样的验证器:(是的,它是空的,并且引发了expection)

和序列化程序:

class CampaignSerializer(CreatorModelSerializer):
    name = serializers.CharField(max_length=32, validators=[
        AlphanumericValidator()
    ])
    class Meta:
        model = Campaign
        fields = ('id', 'name')
        validators = [
            UniqueTogetherValidator(
                queryset=Campaign.objects.all(),
                fields=['account', 'name'],
                message='A campaign with this name is already exists.',
            ),
        ]
我的有效载荷:

id: 5
name: "aaq???asdas"
我的看法是:

class CampaignDetailView(APIView):
    permission_classes = (IsOwner, )

    def get_object(self, request, campaign_pk):
        campaign = get_object_or_404(Campaign, pk=campaign_pk)
        self.check_object_permissions(request, campaign)
        return campaign

    def put(self, request, campaign_pk):
        campaign = self.get_object(request, campaign_pk)
        serializer = CampaignSerializer(
            campaign,
            data=request.data,
            context={
                'request': request,
            }
        )
        if serializer.is_valid(raise_exception=True):
            serializer.save()

        return Response(
            serializer.data,
        )
权限所有者:

class IsOwner(permissions.BasePermission):
    def has_object_permission(self, request, view, obj):
        return request.user.profile.account == obj.account
序列化程序正在成功验证名称

我的错在哪里


编辑:我忘记添加ActivityDetailSerializer.put方法的结尾。我添加了它们。

我最疯狂的猜测是,您使用自定义验证器的方式应该与
ModelViewSet一起使用,以触发这些验证器

如果您正在执行自定义操作,请尝试覆盖
ModelSerializer

像下面这样

# I guess that CreatorModelSerializer is a sub-class of ModelSerializer.
class CampaignSerializer(CreatorModelSerializer):
    def validate(self, attrs):
        # Do Validations
        if True:
            raise serializers.ValidationError(
                'ABBBBALIIIZA'
            )
        # Otherwise return the attributes
        return attrs

    class Meta:
        model = Campaign
        fields = ('id', 'name')
        validators = [
            UniqueTogetherValidator(
                queryset=Campaign.objects.all(),
                fields=['account', 'name'],
                message='A campaign with this name is already exists.',
            ),
        ]

此更改后,验证应能正常工作。

您在ActivityDetailView中的put方法正是您得到的?如果没有,请编辑以进行完整的“放置”方法检查。@monio我添加了该方法的其余部分。
# I guess that CreatorModelSerializer is a sub-class of ModelSerializer.
class CampaignSerializer(CreatorModelSerializer):
    def validate(self, attrs):
        # Do Validations
        if True:
            raise serializers.ValidationError(
                'ABBBBALIIIZA'
            )
        # Otherwise return the attributes
        return attrs

    class Meta:
        model = Campaign
        fields = ('id', 'name')
        validators = [
            UniqueTogetherValidator(
                queryset=Campaign.objects.all(),
                fields=['account', 'name'],
                message='A campaign with this name is already exists.',
            ),
        ]