Django Rest框架定义必需字段

2024-09-30 10:28:31 发布

您现在位置:Python中文网/ 问答频道 /正文

编辑

我只想在执行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参数。在

^{pr2}$

有没有更舒服的方法?在


Tags: nameselfsourcefieldsgetemailrequiredvalidate
2条回答

DRF有内置的方法来处理它。在

name = serializers.CharField(label="name field",required=True, allow_blank=False, allow_null=False)

然后使用serializer.is_valid()来验证数据。在

有关详细信息,请参阅this。在

我希望this answer也适用于这里:)

摘要
验证过程只在Deserialization过程时进行(输入是一个dict类对象),并且您正在尝试一个Serialization过程。在Serialization的情况下,DRF假设给定的对象是有效的,因此不需要验证。在

相关问题 更多 >

    热门问题