python - 如何在Django中上传多个文件

标签 python django django-rest-framework

我一直在尝试找到一种使用拖放表单添加多个文件的解决方案。 我正在使用 Django 的 Rest API 和 React。

这是我到目前为止一直在尝试的方法,但似乎一次只能对一个文件执行:

class FileCollection(models.Model):
    Name = models.CharField(max_length=150, null=True, blank=True)
    Files = models.FileField(upload_to='videos_uploaded', null=True, blank=True, validators=[
        FileExtensionValidator(allowed_extensions=['mp4', 'm4v', 'mov', 'mpg', 'mpg2', 'mpeg'])])

我怎样才能使用其余的 API 一次上传多个文件?我只在这里找到了一些有关图像的答案。

最佳答案

由于您仅在问题中显示模型,因此我假设您是在询问如何创建存储多个文件的模型。您当前的 Files 字段实际上只是一个文件,因为您将其声明为 FileField。要拥有多个文件,您需要使用多个 FileField:

class FileCollection(models.Model):
    name = models.CharField(max_length=150, null=True, blank=True)
    file1 = models.FileField(upload_to='videos_uploaded', null=True, blank=True, validators=[
        FileExtensionValidator(allowed_extensions=['mp4', 'm4v', 'mov', 'mpg', 'mpg2', 'mpeg'])])
    file2 = models.FileField(upload_to='videos_uploaded', null=True, blank=True, validators=[
        FileExtensionValidator(allowed_extensions=['mp4', 'm4v', 'mov', 'mpg', 'mpg2', 'mpeg'])])

现在这将有 2 个文件。如果您想要任意数量的文件,首先需要有一个存储一个文件的模型,并使用 ForeignKey 将该文件添加到集合中:

class FileCollection(models.Model):
    name = models.CharField(max_length=150, null=True, blank=True)

class File(models.Model):
    name = models.CharField(max_length=150, null=True, blank=True)
    file = models.FileField(upload_to='videos_uploaded', null=True, blank=True, validators=[
        FileExtensionValidator(allowed_extensions=['mp4', 'm4v', 'mov', 'mpg', 'mpg2', 'mpeg'])])
    collection = models.ForeignKey(FileCollection)

如果要将一个文件添加到多个集合,可以使用 ManyToManyField 而不是 ForeignKey

这仅涉及模型,因为这就是您在问题中发布的所有内容。您还需要为此创建一个 View 。请注意,REST API 并不真正允许文件上传。您可能需要使用多部分表单而不是 REST API。

旁注:Python 中的字段应以小写字母开头。例如,使用 name 而不是 Name

关于python - 如何在Django中上传多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72976649/

相关文章:

Django rest框架上传多个文件

django - 用 Django 的 Postgres 全文搜索匹配一个或多个关键字

python - Apache 说打开文件读取 : Permission Denied 时出错

python - 如何将数据从 Django 脚本发送到 MySQL

django - 删除用作外键的对象

json - Django Rest框架: getting lists from query_params without request. getlist

加入的 Python 进程不会调用 atexit

python - 正确预处理 1D CNN 的 csv 数据

python - 将一列替换为属于两个不同数据框的另一列的值

python - 使用 win32com 或 xlrd 的 Excel 数据库或 mysql 中的数据库