问题描述
使用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 (将#修改为@)