繁体   English   中英

如何使 validate_data 字段可选?

[英]How to make a validate_data field optional?

我正在尝试创建一个 RESTful api 端点来创建新用户。 这就是我放在 serializer.py 中的内容

class UserSerializer(serializers.ModelSerializer):
    Class Meta:
        model = User
        field = ('name', 'division', 'image',)
        extra_kwargs = {'division': {'required': False}}

    def create(self, validated_data):
        newUser = User.objects.create(
           name = validated_data['name'],
           division = validated_data['division']
           image = validated_data['image']
        )
        return newUser;

现在我想做的是我想让部门可选,例如,如果输入部门是“教育”,那么 put is 因为教育是我的数据库表; 但是,如果没有输入,请将其清空。 怎样才能意识到这一点?

您可以尝试以下方法:

def create(self, validated_data):
    division = None
    if validated_data['division']:
        division = validated_data['division']
    newUser = User.objects.create(
        name = validated_data['name'],
        division = division
        image = validated_data['image']
    )
    return newUser;

要使字段为可选,可以使用extra_kwargs字典。 为了使它起作用,必须在fields显式声明该fields

class FooSerializer(serializers.ModelSerializer):
    ...

    class Meta:
        ...
        fields = ('bar', 'baz',)
        extra_kwargs = {'bar': {'required': False}}

通常,尽量不要使用fields = '__all__' ,而是显式声明字段。 这样可以防止您以后意外暴露敏感区域。

在 model 定义的字段上使用null=Trueblank=True ,使这些字段成为可选字段。

答案基于问题下@slider 的评论,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM