Django休息框架imagefield可选

thi*_*sms 5 django django-rest-framework

models.py

picture = models.ImageField(upload_to='Images/', 
                            default='/Images/None/No-img.jpg', blank=True,null=True)
Run Code Online (Sandbox Code Playgroud)

serializers.py

class UserProfileSerializer(serializers.ModelSerializer):
    picture = serializers.ImageField(max_length=None, 
                                     allow_empty_file=True, use_url=True)

    class Meta:
        model = UserProfile
        fields = ('id','picture',)     
        read_only_fields=('id')
Run Code Online (Sandbox Code Playgroud)

但它仍然显示为必填字段,我无法使用图像发出请求,是不是一个错误?

Rah*_*pta 5

也许你应该尝试设置现场picturerequired=False您的序列化.

由于您已定义image不带任何required参数的字段,因此DRF采用默认required值ie True.如果在反序列化期间未提供此字段,则DRF将引发该image字段所需的错误.

来自文档:

通常,如果在反序列化期间未提供字段,则会引发错误.如果在反序列化期间不需要此字段,则设置为false.

默认为True.

 class UserProfileSerializer(serializers.ModelSerializer):
    picture = serializers.ImageField(required=False, max_length=None, 
                                     allow_empty_file=True, use_url=True)
Run Code Online (Sandbox Code Playgroud)

  • `extra_kwargs = {'picture':{'required':False}}`也可能这样 (2认同)