0

我有以下cutsom base Serializer:

class CustombBaseSerializer(Serializer):

    def get_object(self, model, **kwargs):
        try:
            return model.objects.get(**kwargs)   
        except model.DoesNotExist:
            raise ValidationError(
                f"{model._meta.verbose_name.title()} Does Not Exist."
            )

CutsomBaseSerializer以及从(上面)继承的以下序列化程序:

class TextAnswerSerializer(CustombBaseSerializer):
    sheet_code = CharField(
        max_length=11,
    )

    def validate_sheet_code(self, value):
        return self.get_object(SheetCode, pk=value)

    def validate(self, attrs):
        if attrs.get('sheet_code').user_id != attrs.get('user_id'):
            raise ValidationError("It's not yours!")

        if attrs.get('sheet_code').kind == 'infinity':
            # some stuff
        elif attrs.get('sheet_code').kind == 'feedback':
            # some more stuff
        else:
            # some other stuff

        return attrs

当我向这个序列化程序发送数据时,它会引发一个异常:

myapp.models.SheetCode.MultipleObjectsReturned: get() 返回了多个 SheetCode —— 它返回了 3 个!

我发现,validate_sheet_code触发了3次。有什么问题?以及如何解决?

更新
我更改validate_sheet_code如下,但它再次引发先前的错误:

def validate_sheet_code(self, value):
    try:
        return SheetCode.objects.get(pk=value)
    except SheetCode.DoesNotExist:
        raise ValidationError()

它再次引发该错误。

4

0 回答 0