在使用base64在django rest api中保存图像时,我希望将null设置为true

在使用base64在django rest api中保存图像时,我希望将null设置为true,django,django-rest-framework,django-serializer,Django,Django Rest Framework,Django Serializer,我的模型是: class Profile(models.Model): store_picture1 = models.ImageField(null=True, blank=True) store_picture2 = models.ImageField(null=True, blank=True) store_picture3 = models.ImageField(null=True, blank=True) store_picture4 = models.ImageField(null

我的模型是:

class Profile(models.Model):

store_picture1 = models.ImageField(null=True, blank=True)
store_picture2 = models.ImageField(null=True, blank=True)
store_picture3 = models.ImageField(null=True, blank=True)
store_picture4 = models.ImageField(null=True, blank=True)
store_picture5 = models.ImageField(null=True, blank=True)
store_picture6 = models.ImageField(null=True, blank=True)

def save(self,*args, **kwargs):

    if self.user_picture:
        im = Image.open(self.user_picture)
        output = BytesIO()
        im = im.resize((740, 610))
        im.save(output, format='JPEG', quality=120)
        im.save(output, format='PNG', quality=120)
        output.seek(0)
        self.user_picture = InMemoryUploadedFile(output, 'ImageField', "%s.jpg" % 
        self.user_picture.name.split('.')[0], 'image/jpeg',sys.getsizeof(output), None)
        self.user_picture = InMemoryUploadedFile(output, 'ImageField', "%s.png" % 
        self.user_picture.name.split('.')[0], 'image/png',sys.getsizeof(output), None)


        self.user_picture = InMemoryUploadedFile(output, 'ImageField', "%s.jpg" % 
        self.user_picture.name.split('.')[0], 'image/jpeg',sys.getsizeof(output), None)
        self.user_picture = InMemoryUploadedFile(output, 'ImageField', "%s.png" % 
        self.user_picture.name.split('.')[0], 'image/png',sys.getsizeof(output), None)
这是我的serializers.py类:

class Base64ImageField(serializers.ImageField):

def to_internal_value(self, data):

    # Check if this is a base64 string
    if isinstance(data, six.string_types):
        # Check if the base64 string is in the "data:" format
        if 'data:' in data and ';base64,' in data:
            # Break out the header from the base64 content
            header, data = data.split(';base64,')

        # Try to decode the file. Return validation error if it fails.
        try:
            decoded_file = base64.b64decode(data)
        except TypeError:
            self.fail('invalid_image')

        # Generate file name:
        file_name = str(uuid.uuid4())[:12] # 12 characters are more than enough.
        # Get the file name extension:
        file_extension = self.get_file_extension(file_name, decoded_file)

        complete_file_name = "%s.%s" % (file_name, file_extension, )

        data = ContentFile(decoded_file, name=complete_file_name)

    return super(Base64ImageField, self).to_internal_value(data)

def get_file_extension(self, file_name, decoded_file):

    extension = imghdr.what(file_name, decoded_file)
    extension = "jpg" if extension == "jpeg" else extension

    return extension


class ProfileUpateSerializer(ModelSerializer):


user_picture = Base64ImageField(
    max_length=None, use_url=True,
)

store_picture1 = Base64ImageField(
    max_length=None, use_url=True,
)

store_picture2 = Base64ImageField(
    max_length=None, use_url=True,
)

store_picture3 = Base64ImageField(
    max_length=None, use_url=True,
)

store_picture4 = Base64ImageField(
    max_length=None, use_url=True,
)

store_picture5 = Base64ImageField(
    max_length=None, use_url=True,
)

store_picture6 = Base64ImageField(
    max_length=None, use_url=True,
)

class Meta:
    model = Profile

    fields ='__all__'
我确实在我的models.py中为imageField设置了null=true和blan=true,但当我想要使用带有api的image base64发送时,会通知它需要此字段 如何在我的序列化程序类中设置null和blank true


事实上,我认为我应该在serializers.py中的类ProfileUpateSerializer中添加一些内容,您可以在Base64ImageField中传递required=False。即

user_picture = Base64ImageField(
    max_length=None, use_url=True, required=False
)