django 如何将validate_data字段设置为可选?

ffscu2ro  于 2022-11-18  发布在  Go
关注(0)|答案(3)|浏览(178)

我正在尝试创建一个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;

现在我想做的是我想使部门可选,例如,如果输入部门是“教育”,那么把是作为教育是我的数据库表;但如果没有输入,就把它清空,怎么能实现呢?

jmo0nnb3

jmo0nnb31#

若要使字段成为可选字段,可以使用extra_kwargs指令。为了使其生效,必须在fields中显式声明该字段。

class FooSerializer(serializers.ModelSerializer):
    ...

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

一般来说,尽量不要使用fields = '__all__',而是显式声明字段,这样可以避免以后意外地暴露敏感字段。

zpjtge22

zpjtge222#

您可以尝试以下操作:

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;
inn6fuwd

inn6fuwd3#

在模型定义中的字段上使用null=Trueblank=True,使这些字段成为可选字段。
答案基于@slider在问题下的评论,

相关问题