Django 使用表单从一个按钮上传多个图像

Django Upload multiple images from a single button using forms

已经做了很多研究,但我似乎找不到太多这方面的信息。

我有一个简单的博客应用程序,用户可以在其中通过模型表单创建博客 post。我希望用户能够通过单个按钮将多张图片上传到他们的博客。

我找到的大多数解决方案都是使用管理面板或只是创建多个按钮。 None 正在使用表单和按钮。

我认为解决此问题的最佳方法是创建一个新模型,并与博客模型保持一致,但我似乎无法想出合适的实现方式。如果您能指出正确的方向,我们将不胜感激。

类似...

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = RichTextUploadingField(blank=True, null=True)
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)

class PostImages(models.Model):
    post = models.ForeignKey(Post, default=None, on_delete=models.CASCADE)
    images = models.ImageField(upload_to='post_images')
    date_posted = models.DateTimeField(default=timezone.now)

既然你说了多张,我假设图片的数量是未知的。因此,您可以为图片上传创建不同的模型。然后,您可以创建与存储所需图像数量的模型的多对一关系。您可以利用 Django 的外键来执行此操作。您可以参考 https://docs.djangoproject.com/en/3.2/topics/db/examples/many_to_one/

您可以按照以下步骤操作-

  1. 创建两个单独的模型 1 用于获取存储用户 ID 等的输入数量。第二个用于存储图像上传字段。
  2. 然后你可以声明一个外键。
  3. 在此之后,您呈现一个表单,其中您获取输入图像的数量,一旦知道您为图像上传对象创建那么多对象(所有链接到同一用户)并呈现一个用户上传它们的表单,然后您可以将它们保存在相应的图片上传字段中。

您始终可以使用外键从自定义用户模型或任何此类内容访问图像。

自从你提到用户后,我假设你有某种用户模型系统。如果您使用的是默认的 django 用户模型,那么您可以扩展它以合并图像字段的数量。这可以通过扩展现有的用户模型来完成。详情 - https://docs.djangoproject.com/en/3.2/topics/auth/customizing/

或者您可以只创建一个模型来存储图像数量并将用户声明为该模型的一对一模型。像这样

class UserDetails(models.Model):

   user = models.OneToOneField(User, on_delete=models.CASCADE)
   num_images = models.IntegerField(blank = True)