在django中保存从输入表单动态创建的文件夹中的图像/文档或媒体文件

在django中保存从输入表单动态创建的文件夹中的图像/文档或媒体文件,django,django-models,django-forms,django-templates,django-views,Django,Django Models,Django Forms,Django Templates,Django Views,我想做一个笔记平台,老师可以上传笔记,其他人也可以访问。问题是,每当我上传图像时,它都会被放到同一个文件夹中,我无法根据年份、分支、主题和单位对其进行分类。 由于所有媒体文件都上载到同一个文件夹,我无法获取逻辑,当用户查询笔记时,我如何才能获取媒体/图像/文档文件。 我的表格范本是:- class Note(models.Model): year_choices = ( ( 1 , 'First' ), ( 2 , 'Second'), (

我想做一个笔记平台,老师可以上传笔记,其他人也可以访问。问题是,每当我上传图像时,它都会被放到同一个文件夹中,我无法根据年份、分支、主题和单位对其进行分类。 由于所有媒体文件都上载到同一个文件夹,我无法获取逻辑,当用户查询笔记时,我如何才能获取媒体/图像/文档文件。 我的表格范本是:-

class Note(models.Model):
  year_choices = (
        ( 1  , 'First' ),
        ( 2  , 'Second'),
        ( 3  , 'Third' ),
        ( 4  , 'Fourth')
  )
  branch_choices = (
        ( 'IT','IT'  ),
        ( 'EE','EE'  ),
        ( 'CSE','CSE'),
        ( 'EC','EC'  ),
        ( 'ME','ME'  ),
        ( 'CE','CE'  ),
  )
  unit_choices = ((1,'1'),(2,'2'),(3,'3'),(4,'4'),(5,'5'),
                 (6,'6'),(7,'7'),(8,'8'),(9,'9'),(10,'10'))
  branch = models.CharField(max_length=55,choices=branch_choices)
  year = models.IntegerField(choices = year_choices)
  subject_name = models.CharField(max_length = 15)
  unit = models.IntegerField(choices=unit_choices)
  location = 'images'
  picture = models.ImageField(upload_to = location)
我的笔记上传表单和搜索表单(用于搜索)字段为:-

class notesform(forms.ModelForm):
    class Meta:
        model = Note
        fields = [ 'year','branch','subject_name','unit','picture' ]

class searchform(forms.ModelForm):
    class Meta:
        model = Note
        fields = [ 'year','branch','subject_name','unit' ]
我的注释添加了功能逻辑:-

def addNotes(request):
    if request.user.is_authenticated():
        if request.method == "POST":
            form = notesform(request.POST,request.FILES)
            if form.is_valid():
                profile = Note()               
                profile.year = form.cleaned_data["year"]
                profile.branch = form.cleaned_data["branch"]
                profile.subject_name = form.cleaned_data["subject_name"]
                profile.picture = form.cleaned_data["picture"]
                post = form.save(commit=False)
                post.save()
                return redirect('Notes', pk=post.pk)
        else:
            form = notesform()
        return render(request, 'newNotes.html', {'form': form})
    else:
        return redirect('/accounts/login/')
我希望上传的方式是,当老师填写表格并发送上传媒体时,根据他将要填写的字段数据上传文件。例如:-教师先填写“第一年”,然后填写“CSE分公司”,然后填写“数据结构”和“单元1”,然后将表格转到动态媒体文件夹“media/images/1/CSE/Data\u Structure/Unit\u 1/”,这样我就可以轻松地执行搜索查询

如果不能以这种方式应用,请建议其他方式

问题是,每当我上传图像时,它都会被放到同一个文件夹中,我无法根据年份、分支、主题和单位对其进行分类

您可以为上传的
picture
提供一个结构良好的名称,并将其保存在images目录中,而不是为每个单元创建一个新目录(这最终将导致一个巨大的目录树)

定义一个函数以生成
图片的新名称

def generate_picture_name(instance, filename):
    url = "images/{0}_{1}_{2}_{3}.jpg".format(
        instance.branch, instance.year, instance.subject_name, instance.unit)
    return url
并更新
picture
字段以使用
generate\u picture\u name
保存图像文件

picture = models.ImageField(upload_to = generate_picture_name)
现在图像文件将另存为:

媒体/图像/CSE\u 1\u数据结构\u单元\u 1.jpg

检查。您可以在保存模型时使用该实例,然后根据需要返回文件路径。谢谢,它也有效,但问题不同。