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