保存从前端发送到Django后端的图像数组时出错

时间:2019-06-21 07:58:50

标签: python django django-rest-framework imagefield filefield

在尝试将图像数组从前端(ReactJS)发送到后端(Django)时遇到问题。由于Django模型中必须使用ArrayField,因此无法在后端保存对象实例。我在Django中使用PostgreSQL。这就是为什么我可以使用ArrayField的原因。

我已经尝试在序列化器中使用内置的(to_internal_value)方法来尝试保存从前端接收的数据。

https://www.django-rest-framework.org/api-guide/fields/

以下是我制作的Django模型的一部分:


...

lot_location_market = models.CharField(max_length=30, null=True, blank=False)

quality = models.CharField(max_length=250, null=True, blank=True)
remarks = models.CharField(max_length=250, null=True, blank=True)
layer_image = models.ArrayField(models.FileField(upload_to=get_file_path, null=False, blank=False))


我正在使用模型序列化器。 序列化器代码:


class FooSerializer(serializers.ModelSerializer):
    product_name = serializers.CharField(source='product.name', read_only=True)

    class Meta:
        model = Foo
        fields = (   
            ...
            'lot_location_market',
            'remarks',
            'quality',  
            'layer_image',
            )



我正在使用CreateAPIView(它扩展了CreateModelMixin和GenericAPIView)

以下是用于通过API创建Foo实例的视图


class Foo(generics.CreateAPIView):
    permission_classes = (permissions.IsAuthenticated,)
    lookup_field = 'id'
    serializer_class = FooSerializer

    def get_queryset(self):
        return Foo.objects.all()

    def perform_create(self, serializer):
        serializer.save()

1 个答案:

答案 0 :(得分:0)

“每个序列化程序字段类构造函数都至少接受这些参数。”正如您链接的文档中指出的那样。

我对您的班级建模会有所不同。我将创建一个单独的类来处理图像上传并使用一对多字段。与非本地灭菌器/验证相比,它使渲染,显示和操作容易得多。

class Foo(models.Model):
    some_stuff_for_foo=models.CharField()

class Bar:
    foo=models.ForeignKey(fFoo,on_delete=models.CASCADE,related_name='bar')
    image=models.FileField(upload_to=get_file_path, null=False, blank=False)