Django:FileField,缺少content_type

时间:2018-08-20 09:43:03

标签: django django-file-upload

如果我正确阅读了文档,则Django中的FileField不知道文件的content_type:https://docs.djangoproject.com/en/2.1/ref/models/fields/

我想将文件存储在Django应用程序中,但是我想查询content_type。

示例:

  • 列出所有具有content_type为“ application / pdf”文件的对象
  • 列出所有具有content_type为“ application / vnd.openxmlformats-officedocument.spreadsheetml.sheet”文件的对象

最类似于Django的处理方式是什么?

1 个答案:

答案 0 :(得分:1)

假设您的模型如下:

class Foo(models.Model):
    myfile = models.FileField(upload_to='files/')
    content_type = models.CharField(null=True, blank=True, max_length=100)

myfile字段用于存储文件,content_type字段用于存储对应文件的内容类型。

您可以通过覆盖 content_type 模型的 save() 方法来存储文件的 Foo 类型。

Django文件字段提供了 file.content_type 属性,以处理文件的content_type类型。因此,将模型更改为:

class Foo(models.Model):
    myfile = models.FileField(upload_to='files/')
    content_type = models.CharField(null=True, blank=True, max_length=100)

    def save(self, *args, **kwargs):
        self.content_type = self.myfile.file.content_type
        super().save(*args, **kwargs)



现在,您可以使用filter()来查询ORM:

Foo.objects.filter(content_type='application/pdf')