Django动态文件字段上载到

Django动态文件字段上载到,django,file-upload,django-models,filefield,django-file-upload,Django,File Upload,Django Models,Filefield,Django File Upload,我正在尝试创建文件字段模型的动态上载路径。所以,当用户上传文件时,Django会将其存储到我的计算机/media/(用户名)/(路径到文件)/(文件名) 例如/media/Michael/Homeworks/Math/Week_1/questions.pdf或/media/Ernie/Fishing/Atlantic_ocean/Good_Fishing_spots.txt VIEWS @login_required def add_file(request, **kwargs): if req

我正在尝试创建文件字段模型的动态上载路径。所以,当用户上传文件时,Django会将其存储到我的计算机/media/(用户名)/(路径到文件)/(文件名)

例如/media/Michael/Homeworks/Math/Week_1/questions.pdf或/media/Ernie/Fishing/Atlantic_ocean/Good_Fishing_spots.txt

VIEWS
@login_required
def add_file(request, **kwargs):
if request.method == 'POST':
    form = AddFile(request.POST, request.FILES)
    if form.is_valid():
        post = form.save(commit=False)
        post.author = request.user

        post.parent = Directory.objects.get(directory_path=str(kwargs['directory_path']))
        post.file_path = str(kwargs['directory_path'])

        post.file_content = request.FILES['file_content'] <-- need to pass dynamic file_path here

        post.save()
        return redirect('/home/' + str(post.author))

MODELS
class File(models.Model):
    parent = models.ForeignKey(Directory, on_delete=models.CASCADE)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    file_name = models.CharField(max_length=100)
    file_path = models.CharField(max_length=900)
    file_content = models.FileField(upload_to='e.g. /username/PATH/PATH/..../')

FORMS
class AddFile(forms.ModelForm):
    class Meta:
        model = File
        fields = ['file_name', 'file_content']

你可以使用这样的东西(我在我的项目中使用过):

现在:


由于
文件\u路径
文件
模型上的一个属性,因此不能构建如下完整路径:

导入操作系统
def create_路径(实例,文件名):
返回os.path.join(
instance.author.username,
instance.file\u路径,
文件名
)
然后从您的
文件
模型中引用它:

类文件(models.Model):
...
文件内容=模型.FileField(上传到=创建路径)

def get_upload_to(instance, filename):
    return 'upload/%d/%s' % (instance.profile, filename)


class Upload(models.Model):
    file = models.FileField(upload_to=get_upload_to)
    profile = models.ForeignKey(Profile, blank=True, null=True)
import os
def get_upload_path(instance, filename):
    return os.path.join(
      "user_%d" % instance.owner.id, "car_%s" % instance.slug, filename)
photo = models.ImageField(upload_to=get_upload_path)