如何使validate_data字段为可选?

时间:2018-10-11 15:39:25

标签: python django django-models django-rest-framework django-serializer

我正在尝试创建一个RESTful api端点来创建一个新用户。这就是我放入序列化器的内容。

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;

现在我想做的是让该部门成为可选部门,例如,如果输入部门为“ Education”,则将“教育”作为我的数据库表;但是,如果没有输入,请使其为空。如何实现呢?

2 个答案:

答案 0 :(得分:0)

您可以尝试以下方法:

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;

答案 1 :(得分:0)

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

class FooSerializer(serializers.ModelSerializer):
    ...

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

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