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/'
Вернуться на верх