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

时间:2017-02-24 17:32:43

标签: django django-models django-forms django-templates django-views

我想创建一个Notes平台,教师可以上传Notes,其他人可以访问它。问题是每当我上传图像时,它都会转到同一个文件夹,而我无法根据年份,分支,主题和单位对其进行分类。 由于所有媒体文件都上传到同一个文件夹,我无法获得逻辑,当用户查询笔记时,我将如何获取媒体/图像/ doc文件。 我的模型形式是: -

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”,然后它进入动态媒体folde r“ media / images / 1 / CSE / DATA_STRUCTURE / UNIT_1 / < /strong>“所以我可以轻松实现搜索查询。

如果不能以这种方式应用,请提出其他一些方法。

1 个答案:

答案 0 :(得分:0)

  

问题在于,每当我上传图像时,它都会转到同一个文件夹,而我无法根据年份,分支,主题和单位对其进行分类。

您可以为上传的test_list[cummax((!is.na(test_list)) * seq_along(test_list))] 提供结构良好的名称,并将其保存在images目录中,而不是为非常单位创建新目录(最终会产生巨大的目录树)。 / p>

定义一个函数以生成picture的新名称:

picture

并更新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_picture_name

现在图像文件将保存为:
媒体/图像/ CSE_1_DATA_STRUCTURE_UNIT_1.jpg