我一直在尝试找到一种使用拖放表单添加多个文件的解决方案。 我正在使用 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/