Django : Загрузка нескольких файлов в каталог, отмеченный пользователем
Я новичок в Django и пытаюсь сделать приложение для загрузки нескольких файлов с помощью форм. Более того, я хотел бы, чтобы файлы сохранялись в директории, которая содержит имя пользователя при аутентификации.
Я использовал различные учебники, которые смог найти, но я не понимаю, почему они не работают. Ниже вы найдете мой код. Спасибо за помощь.
models.py
from django.db import models
def user_directory_path(user, filename):
# file will be uploaded to MEDIA_ROOT/user_<id>/<filename>
return 'user_{0}/{1}'.format(user, filename)
class Files(models.Model):
files = models.FileField(upload_to=user_directory_path)
uploaded_at = models.DateTimeField(auto_now_add=True)
формы
from django import forms
class FilesForm(forms.Form):
file_field = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}))
views.py
def initialize_context(request):
context = {}
# Check for any errors in the session
error = request.session.pop('flash_error', None)
if error != None:
context['errors'] = []
context['errors'].append(error)
# Check for user in the session
context['user'] = request.session.get('user', {'is_authenticated': False})
return context
def upload(request):
context = initialize_context(request)
if request.method == 'POST':
form = FilesForm(request.POST, request.FILES)
files = request.FILES.getlist('file_field')
if form.is_valid():
for f in files :
newfile = Files(f)
newfile.save()
else:
form = FilesForm()
# Load files for the list page
files = Files.objects.all()
context['files'] = files
return render(request, 'base/upload.html', context)
settings.py
STATIC_URL = 'static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'