【问题标题】:Django Upload multiple images from a single button using formsDjango 使用表单从一个按钮上传多个图像
【发布时间】:2023-03-06 19:58:01
【问题描述】:

一直在做大量的研究,但我似乎无法找到这方面的很多信息。

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

我发现的大多数解决方案都是使用管理面板或只是创建多个按钮。没有人将表单与按钮一起使用。

我认为解决此问题的最佳方法是创建一个具有博客模型 FK 的新模型,但我似乎无法提出正确的实现。如果您能指出我正确的方向,我们将不胜感激。

类似...

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)

【问题讨论】:

  • 也许您可以创建一个模型,其中每个字段都是一个图像,当要求用户以附加到该新模型的表单中上传图像时,表单将为每个字段显示一个 Upload file 按钮您已添加到模型中。
  • 这可行,但如果用户有 30 张图片要上传,那么他们必须点击 30 个按钮并选择一张图片是不切实际的

标签: django django-forms


【解决方案1】:

既然你说的是多个,我假设图像的数量是未知的。因此,您可以为图像上传创建不同的模型。然后,您可以创建与存储所需图像数量的模型的多对一关系。您可以利用 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)

【讨论】:

  • 我想我明白你的意思了,你可以看看我的更新
猜你喜欢
  • 2014-04-08
  • 2015-06-14
  • 1970-01-01
  • 2015-10-04
  • 1970-01-01
  • 2017-05-03
  • 1970-01-01
  • 2021-08-14
  • 2020-11-19
相关资源
最近更新 更多