我有以下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()
它再次引发该错误。