выберите несколько файлов в django с помощью одного поля файла

#django #file-upload #django-models #django-admin

#django #загрузка файла #django-модели #django-admin

Вопрос:

Как я могу выбрать несколько файлов в одном FileField в django? Я хочу выбрать разные форматы файлов в одном filefiled в django admin.

 **models.py**
 class FileModel(models.Model):
    name = models.CharField(max_length=100)
    file_upload = models.FileField(upload_to=settings=PATH)

**admin.py**
 admin.site.register(FileModel,FileAdmin);
 

В администраторе я хочу настроить поле file, чтобы выбрать несколько файлов для сохранения по заданному пути? Не могли бы вы мне помочь?

Комментарии:

1. Вы не можете этого сделать, вы могли бы рассмотреть отдельную модель для представления отдельных файлов и создать связь manytomany с вашей файловой моделью

2. @ChrisPratt действительно не видит проблемы в желании прикрепить несколько файлов к модели. Зачем вообще иметь файловое поле, когда вы можете иметь однозначную связь с пользовательской файловой моделью? В любом случае. Кто-то еще был также удивлен этим ограничением: koensblog.eu/blog/7/multiple-file-upload-django — стоит посмотреть?

Ответ №1:

Вы не можете? Файловое поле не было предназначено для этой цели.

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

Конечно, я вообще не вижу смысла делать это, когда вы можете просто определить отношение «один ко многим» или даже «многие ко многим» между новой моделью списка файлов и существующей filemodel. Затем вы могли бы создать встроенный обработчик администратора, прикрепленный к модели загрузчика, и таким образом вы могли бы легко добавлять несколько файлов.

Подробности см. в разделе Встроенные модели администрирования.

Комментарии:

1. Я думаю, мы можем сделать это с помощью плагина Jquery, настроив django admin 😉

Ответ №2:

В более новых версиях Django это теперь возможно.

См. Документацию по адресу https://docs.djangoproject.com/en/3.2/topics/http/file-uploads/#uploading-multiple-files

Ответ №3:

Я знаю, что это устарело, но оно появляется в верхней части поиска Google, поэтому я решил прокомментировать. Для этого вы можете использовать django-multiupload.

 # forms.py
from django import forms
from multiupload.fields import MultiFileField

class UploadForm(forms.Form):
     attachments = MultiFileField(min_num=1, max_num=3, max_file_size=1024*1024*5)
 

Надеюсь, это поможет.

Комментарии:

1. Я пробую это решение и выдает ошибку: Django Version: 1.8.5 Exception Type: AttributeError Exception Value: 'list' object has no attribute '_committed' вы знаете, как это решить?

2. Мне не очень повезло с этим — похоже, это мертвый проект без поддержки более новых версий Django.