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(),则
将失败。验证(字段)
检查所有必需字段(以及为模型设置的任何其他限制)。