Ошибка при сохранении массива изображений, отправленных из внешнего интерфейса в бэкэнд Django - PullRequest
0 голосов
/ 21 июня 2019

Я столкнулся с проблемой при попытке отправить массив изображений с внешнего интерфейса (ReactJS) на внутренний (Django). Экземпляр объекта не сохраняется в бэкэнде из-за обязательного ArrayField в модели Django. Я использую PostgreSQL с Django. Вот почему я могу использовать ArrayField.

Я уже пытался использовать встроенный (to_internal_value) метод в сериализаторе, чтобы попытаться сохранить данные, полученные из внешнего интерфейса.

https://www.django -rest-framework.org / апи-гид / поля /

Ниже приведена часть модели Джанго, которую я сделал:


...

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)

Ниже приведено представление для создания экземпляра Foo из API


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 голосов
/ 22 июня 2019

"Каждый конструктор класса поля сериализатора принимает как минимум эти аргументы." Как указано в документации, на которую вы ссылаетесь.

Хотя я бы смоделировал ваш класс немного иначе. Я бы создал отдельный класс для обработки загрузки изображений и использования одного во многих полях. это делает рендеринг, отображение и манипулирование намного проще в обращении, чем прохождение нестерильного стерилизатора / проверки.

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)
...