Вы действительно можете сделать это, установив атрибут upload_to
вашего FileField
в вызываемое, как описано здесь в документации.
Пример
import os
from django.conf import settings
from django.db import models
# Create user dir if non-existant and return upload path
def upload_path(instance, filename):
path = os.path.join(settings.MEDIA_ROOT, str(instance.user))
if not os.path.isdir:
os.mkdir(path)
return os.path.join(path, filename)
class MyMail(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=200)
body = models.TextField()
attachment = models.FileField(upload_to=upload_path)
Вложение теперь загружено в папку с именем пользователя в папке мультимедиа.