无法通过图像字段更新模型,而无法通过dango rest框架传递图像文件

问题描述

使用partial_update,尝试在不提供图像文件的情况下使用图像字段更新模型,无论我尝试多少,都会遇到此错误

'File "C:\Users\User\.virtualenvs\lib\site-packages\rest_framework\views.py",line 502,in dispatch
    response = handler(request,*args,**kwargs)
  File "C:\Users\User\Documents\sourcecode\project\app\api.py",line 761,in partial_update
    serializer.save()
  File "C:\Users\User\.virtualenvs\lib\site-packages\rest_framework\serializers.py",line 207,in save
    self.instance = self.update(self.instance,validated_data)
  File "C:\Users\User\.virtualenvs\lib\site-packages\rest_framework\serializers.py",line 992,in update
    instance.save()
  File "C:\Users\User\.virtualenvs\lib\site-packages\django\db\models\base.py",line 745,in save
    self.save_base(using=using,force_insert=force_insert,File "C:\Users\User\.virtualenvs\lib\site-packages\django\db\models\base.py",line 782,in save_base
    updated = self._save_table(
  File "C:\Users\User\.virtualenvs\lib\site-packages\django\db\models\base.py",line 861,in _save_table
    values = [(f,None,(getattr(self,f.attname) if raw else f.pre_save(self,False)))
  File "C:\Users\User\.virtualenvs\lib\site-packages\django\db\models\base.py",in <listcomp>
    values = [(f,False)))
  File "C:\Users\User\.virtualenvs\lib\site-packages\django\db\models\fields\files.py",line 286,in pre_save
    if file and not file._committed:
AttributeError: 'memoryview' object has no attribute '_committed''

models.py

class mymodel(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=200)
    image_file = models.ImageField(max_length=255,upload_to=upload_image_path,blank=True,null=True)
    is_production_ready = models.BooleanField(blank=True,null=True)

def upload_image_path(instance,filename):
    return "/".join(['image_file',str(instance.id),filename]

Serializers.py

class imageSerializer(serializers.ModelSerializer):
    
    class Meta:
        model = mymodel
        fields = '__all__'
        depth = 1

API.py

class imageViewSet(viewsets.ModelViewSet):
    queryset = mymodel.objects.all()
    permission_classes = [permissions.AllowAny]
    serializer_class = imageSerializer
    parser_classes = (
        MultiPartParser,FormParser,FileUploadParser,)
    
    def partial_update(self,request,pk=None):
        instance = self.get_object()
        data = {}
        data['id'] = request.data['id']
        data['is_production_ready'] = request.data['is_production_ready']
        # data['image_file'] = instance.image_file        
        serializer = imageSerializer(instance,data=data,partial=partial)
        if serializer.is_valid():
            print("serializer is valid...")
            print("serializer :: ",serializer)            
            serializer.save()
            return JsonResponse(serializer.data,status=201)
        return JsonResponse(serializer.errors,status=400)

尝试排除序列化程序中的图像字段

class imageSerializer(serializers.ModelSerializer):
    class Meta:
        model = mymodel
        exclude = ("image_file",)

还在models.py中定义了“ blank = True”和“ null = True”

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...