Django 如何在modelserializer中检查值“无”
我有一个问题Django 如何在modelserializer中检查值“无”,django,django-rest-framework,Django,Django Rest Framework,我有一个问题 class PetSerializer(ModelSerializer): class Meta: model = Pet fields = '__all__' 如何检查此序列化程序是否获取对象 如果后端中有值,它将返回正确的格式 但是如果没有值,它只返回none 因此,我需要将该响应更改为字符串“none”如果需要对序列化程序对象本身运行验证,可以重写序列化程序类的validate方法: 类序列化程序(ModelSerializer):
class PetSerializer(ModelSerializer):
class Meta:
model = Pet
fields = '__all__'
如何检查此序列化程序是否获取对象
如果后端中有值,它将返回正确的格式
但是如果没有值,它只返回none
因此,我需要将该响应更改为字符串“none”如果需要对序列化程序对象本身运行验证,可以重写序列化程序类的
validate
方法:
类序列化程序(ModelSerializer):
类元:
型号=宠物
字段='\uuuu所有\uuuu'
def验证(自我,字段):
#您也可以使用'fields['name']`但是
#如果未定义“name”,将引发KeyError
如果不是字段,则获取('name'):
引发序列化程序。验证错误(
detail=“宠物需要一个名字:(”,
code=“E_NO_PET_NAME”
)
if fields.get('species').lower()=“恐龙”:
引发序列化程序。验证错误(
detail=“不能将恐龙作为宠物”,
code=“你太鲁莽了”
)
返回字段
#或运行'super()。验证(字段)`
或者,如果您只需要验证一个字段(例如宠物的名字),您可以执行以下操作:
。。。
def验证_名称(self,name):
如果不是姓名:
引发序列化程序。验证错误(
detail=“宠物需要一个名字:(”,
code=“E_NO_PET_NAME”
)
参考文献:如果需要对序列化程序对象本身运行验证,可以重写序列化程序类的
验证方法:
类序列化程序(ModelSerializer):
类元:
型号=宠物
字段='\uuuu所有\uuuu'
def验证(自我,字段):
#您也可以使用'fields['name']`但是
#如果未定义“name”,将引发KeyError
如果不是字段,则获取('name'):
引发序列化程序。验证错误(
detail=“宠物需要一个名字:(”,
code=“E_NO_PET_NAME”
)
if fields.get('species').lower()=“恐龙”:
引发序列化程序。验证错误(
detail=“不能将恐龙作为宠物”,
code=“你太鲁莽了”
)
返回字段
#或运行'super()。验证(字段)`
或者,如果您只需要验证一个字段(例如宠物的名字),您可以执行以下操作:
。。。
def验证_名称(self,name):
如果不是姓名:
引发序列化程序。验证错误(
detail=“宠物需要一个名字:(”,
code=“E_NO_PET_NAME”
)
参考文献:
要检查序列化程序中的输入数据,只需根据需要执行验证
from rest_framework import serializers
class PetSerializer(ModelSerializer):
class Meta:
model = Pet
def validate(self, data):
if data is None:
raise serializers.ValidationError("data is expected as dict()")
if not data.get('name'):
raise serializers.ValidationError("name is needed")
return data
在中查找对象级验证要检查序列化程序中的输入数据,只需根据需要实现
验证
from rest_framework import serializers
class PetSerializer(ModelSerializer):
class Meta:
model = Pet
def validate(self, data):
if data is None:
raise serializers.ValidationError("data is expected as dict()")
if not data.get('name'):
raise serializers.ValidationError("name is needed")
return data
在观察中查找对象级验证:
get\u color
get\u category
和get\u photo
不需要。无需将它们声明为SerializerMethodField()
同样,请提供获取None
的呼叫,否则只是猜测检查我的更新问题观察:get\u color
get\u category
和get\u photo
不需要。无需将它们声明为SerializerMethodField()
同样,请提供获取None
的调用,否则只是猜测检查我更新的问题validate()
如果数据None
@tuergeist我相信super()。validate(字段)
检查任何必需字段(以及为模型设置的任何其他限制)。validate()如果数据为None
@tuergeist我相信super(),则
将失败。验证(字段)
检查所有必需字段(以及为模型设置的任何其他限制)。