Django更新视图集

Django更新视图集,django,django-models,django-rest-framework,imagefield,Django,Django Models,Django Rest Framework,Imagefield,目前我正在开发一个图像库django项目。用户可以上载图像,然后将“结果”上载到每个图像。 我知道我必须重写update(…)函数,但我想我需要Base64ImageField的帮助 逐步: 用户上载图像(结果=空) 图像存储在云中 用户将结果上载到指定的图像(此处需要帮助) 以下是我目前的结构: class Image(models.Model): project = models.ForeignKey(Project) image = models.ImageField(upload

目前我正在开发一个图像库django项目。用户可以上载图像,然后将“结果”上载到每个图像。 我知道我必须重写update(…)函数,但我想我需要Base64ImageField的帮助

逐步:

  • 用户上载图像(结果=空)
  • 图像存储在云中
  • 用户将结果上载到指定的图像(此处需要帮助)
  • 以下是我目前的结构:

    class Image(models.Model):
      project = models.ForeignKey(Project)
      image = models.ImageField(upload_to='images')
      result = models.ImageField(upload_to='results')
    
    class ImageSerializer(serializers.ModelSerializer):
      project = ProjectSerializer(read_only=True, required=False)
      image = Base64ImageField(max_length=None, use_url=False)
      result = Base64ImageField(max_length=None, use_url=False, required=False)
    
    class ProjectImagesViewSet(viewsets.ViewSet):
      queryset = Image.objects.select_related('project').all()
      serializer_class = ImageSerializer
    
      def list(self, request, project_pk=None):
        queryset = self.queryset.filter( project__name = project_pk)
        serializer = self.serializer_class(queryset, many=True)
        return Response(serializer.data)
    
      def update(self, request, pk=None, project_pk=None):
        print(request.data['result'])
        ???
    

    Django Rest框架约定使用部分_更新而不是更新(补丁请求方法)。如果要将带有图像的修补程序请求发送到与检索相同的url,则应更新。如果更新时需要其他功能,则可以定义:

    class ProjectImagesViewSet(viewsets.ViewSet):
        #.....
        def partial_update(self, request, *args, **kwargs):
                instance = self.get_object()
                serializer = self.serialize(instance, data=request.data, partial=True)
                serializer.is_valid(raise_exception=True)
                #.... Your code ....
                serializer.save()
                return Response(serializer.data)
    
    编辑: 尝试以下更改:

    class ImageSerializer(serializers.ModelSerializer):
        project = ProjectSerializer(read_only=True, required=False)
        image = Base64ImageField(max_length=None, use_url=False)
        result = Base64ImageField(max_length=None, use_url=False, required=False)
    
        class Meta:
            model = Image
    
    
    class ProjectImagesViewSet(viewsets.ViewSet):
        queryset = Image.objects.select_related('project').all()
        serializer_class = ImageSerializer
    
        def list(self, request, project_pk=None):
            queryset = self.queryset.filter(project__name=project_pk)
            serializer = self.serializer_class(queryset, many=True)
            return Response(serializer.data)
    
        def update(self, request, pk=None, project_pk=None):
            print(request.data['result'])
    
        def partial_update(self, request, *args, **kwargs):
            instance = self.queryset.get(pk=kwargs.get('pk'))
            serializer = self.serializer_class(instance, data=request.data, partial=True)
            serializer.is_valid(raise_exception=True)
            serializer.save()
            return Response(serializer.data)
    

    谢谢你的回答。现在我得到了以下错误:AttributeError:type对象“ImageSerializer”没有属性“serialize”,您使用的是哪个版本的DRF?