1

1) Я хотел бы создать несколько экземпляров модели с одним вызовом API, например, здесь: How do I create multiple model instances with Django Rest Framework? Я пробовал решение, указанное в ссылке, без успеха.Создание экземпляров нескольких моделей в DRF3

Я пытаюсь загрузить несколько файлов в один вызов API. Результат: файлы загружаются (только один раз, когда я перезаписал perform_create), но создается только один экземпляр (если я отправляю два файла, только последний создается как экземпляр).

Мой код:

class FileUploadSerializer(serializers.ModelSerializer): 
    def __init__(self, *args, **kwargs): 
     many = kwargs.pop('many', True) 
     super(FileUploadSerializer, self).__init__(many=many, *args, **kwargs) 

    class Meta: 
     model = FileUpload 
     read_only_fields = ('created', 'datafile', 'owner') 

class FileUploadViewSet(viewsets.ModelViewSet): 
    queryset = FileUpload.objects.all() 
    serializer_class = FileUploadSerializer 
    parser_classes = (MultiPartParser, FormParser,) 

    def perform_create(self, serializer): 
     file_list = self.request.data.getlist('file') 
     for item in file_list: 
      serializer.save(file=item) 

Я на правильном пути? В документации http://www.django-rest-framework.org/api-guide/serializers/#dealing-with-multiple-objects упоминается: «Чтобы сериализовать запрос или список объектов вместо экземпляра одного объекта, вы должны передать флаг many = True при создании экземпляра сериализатора. Затем вы можете передать запрос или список объектов, которые будут сериализованы». => Должно быть возможно ...

2) Разве лучше использовать django-rest-framework-bulk для этого? https://github.com/miki725/django-rest-framework-bulk

+0

Возможный дубликат [Как размещать/помещать данные json в ListSerializer] (http://stackoverflow.com/questions/27869841/how-to-post-put-json-data-to-listserializer) –

ответ

1

Что касается структуры Django REST 3.1, невозможно представить несколько значений с использованием данных формы. Это связано с тем, что нет стандартизованного способа отправки списков данных с ассоциациями, которые необходимы для обработки ListSerializer.

Планирует реализовать поддержку HTML JSON forms, которая в конечном итоге позволит этому работать со стандартом. Это означает, что для платформы Django REST 3.2, но еще не завершено.


До тех пор, прежде чем использовать данные формы, рекомендуется использовать JSON. JSON поддерживается для массового создания и обновления, and you can read about how to impelement it here. Альтернативой является use django-rest-framework-bulk, который может сделать то же самое.

Чтобы загрузить файл с помощью JSON, вам необходимо будет закодировать файл base64 и использовать a custom Base64ImageField, чтобы они могли быть загружены. Это потому, что JSON does not natively support file uploads.

+0

Хорошо, спасибо для этого. Док не дал мне понять это - попытается использовать DRF-bulk! – MJP

+0

Кстати, это хорошая идея для массовой загрузки нескольких закодированных ZIP-файлов с base64? Один почтовый размер может составлять около 3 - 5 МБ. – MJP

+0

Нет, вероятно, нет. Многие веб-серверы будут отклонять запросы на определенный предел размера (10-25 МБ). Это не является особенностью отправки файлов через JSON (хотя запросы больше), вы бы столкнулись с аналогичными ограничениями при стандартной загрузке файлов. –

Смежные вопросы