如何解决无法通过图像字段更新模型,而无法通过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 举报,一经查实,本站将立刻删除。