编辑
我只想在执行BrokerSerializer(user).data
并且任何值是None
时引发异常
我使用DRF序列化对象,通过API导出它们,我不使用它来创建对象。在
寻找一种最简单的方法,使字段在序列化模型时是必需的。在
API需要一些字段不为null,因此如果其中任何一个字段为null/None,我想引发APIMissingDataException
。在
我试过了:
class BrokerSerializer(serializers.ModelSerializer):
import_id = serializers.IntegerField(source='pk')
deleted = serializers.SerializerMethodField()
full_name = serializers.CharField(source='userprofile.get_display_name')
phone_work = serializers.CharField(source='userprofile.contact_information.telephone')
email_work = serializers.CharField(source='userprofile.contact_information.email')
class Meta:
model = User
fields = ['import_id', 'deleted', 'full_name', 'phone_work', 'email_work']
required_fields = fields
def validate(self, attrs):
super().validate(attrs)
if not all([attrs.get(fieldname) for fieldname in self.Meta.required_fields]):
raise APIMissingDataException()
return attrs
def get_deleted(self, obj):
return 0
但是由于某种原因,validate
函数没有被调用。我不想明确地定义所有字段,只是为了给它们添加required=False
参数。在
有没有更舒服的方法?在
DRF有内置的方法来处理它。在
然后使用
serializer.is_valid()
来验证数据。在有关详细信息,请参阅this。在
我希望this answer也适用于这里:)
摘要
验证过程只在
Deserialization
过程时进行(输入是一个dict
类对象),并且您正在尝试一个Serialization
过程。在Serialization
的情况下,DRF假设给定的对象是有效的,因此不需要验证。在相关问题 更多 >
编程相关推荐