如何使用 django 为文件列表中的每个文件创建外键集

Posted

技术标签:

【中文标题】如何使用 django 为文件列表中的每个文件创建外键集【英文标题】:How to create a foreign key set for each file in a list of files with django 【发布时间】:2019-04-19 23:46:11 【问题描述】:

我正在尝试使用 Django 将多个图像上传到我的数据库。我希望每个文件都作为主要产品的外键单独存储。所以基本上我的意思是会有产品,然后每个产品都会有多个外键是图像。 Django 根本不将图像存储到数据库中。这是我的代码:

class product(models.Model):
    title = models.CharField('', max_length=100,  db_index=True)
    price = models.CharField('', max_length=100,  db_index=True)
    description = models.CharField('', max_length=100,  db_index=True)

class productimage(models.Model):
    product = models.ForeignKey(product, on_delete=models.CASCADE)
    product_images = models.FileField(blank=True)

if request.method == "POST":
    title = request.POST.get("title")
    price = request.POST.get("price")
    description = request.POST.get("description")
    products = product(title=title,description=description,price=price)
    products.save()
    for image in request.FILES.getlist("images"):
        product_images = image
        products.productimage_set.create(product_images = product_images)
    return render(request,'selling/addproduct.html')

所以基本上我希望每个产品都有一个图像列表作为主产品的外键存储。

【问题讨论】:

【参考方案1】:

我认为你有点困惑 - 使用 _set 后缀是为了获取通过反向遍历的外键列表。要创建它们,您可以一次创建每个productimage,然后使用_set 获取它们。

例子:

...
for image in request.FILES.getlist("images"):
    productimage.objects.create(product=product, product_images=image)
...

然后通过product 实例获取图像:

product.product_images_set.all()

【讨论】:

它仍然没有将图像添加到数据库中 您确定将enctype=“multipart/form-data” 添加到您的表单标签中吗? 原来我忘记添加了。谢谢!

以上是关于如何使用 django 为文件列表中的每个文件创建外键集的主要内容,如果未能解决你的问题,请参考以下文章

Django 1.8 为特定位置上传文件

如何从 django-rest-framework 中的文件列表中过滤图像

为文件夹中的每个文件创建文件夹,并使用 cmd 或批处理从 CSV 命名文件夹

Django 1.6:如何访问视图中的静态文件

如何在 Django 通用列表视图类中使用 slugfield 创建链接?

使用 DJANGO_SETTINGS_MODULE 时如何导入设置?