python - 如何在 Django 中以单一形式上传多个文件?

标签 python django forms file-upload

我有一个产品表单,可以在我的电子商务项目中添加新的待售商品,它有标题、描述、价格、品牌、尺寸区域,我想添加用于放置产品图像的区域,我可以上传带有文件字段的单个文件表单,但我需要上传多个文件并插入到与我的产品模型不同的关系文件模型(产品类从不同的相关类获取图像)。我怎样才能用单一表格做到这一点?我认为我已经很接近解决问题了,但我的方法不对。

我使用了 betterforms 模块,但我不能。

模型.py

from django.db import models
from django.db.models import F
from ckeditor.fields import RichTextField

class ProductImage(models.Model):
   product_id = models.ForeignKey("Product", on_delete = models.CASCADE, verbose_name = "Product")
   product_image = models.FileField(upload_to='product_images/')
   cover_image = models.BooleanField(default=False)
   upload_date = models.DateTimeField(auto_now_add = True, verbose_name="Upload Date")

class Product(models.Model):
   seller = models.ForeignKey("auth.User", on_delete = models.CASCADE, verbose_name = "Seller")
   category = models.ForeignKey("Category", on_delete = models.CASCADE, verbose_name = "Category Name")
   title = models.CharField(max_length = 50, verbose_name="Product Title")
   size = models.ForeignKey("Size", on_delete = models.CASCADE, verbose_name = "Size")
   color = models.ForeignKey("Color", on_delete = models.CASCADE, verbose_name = "Color")
   last_used_date = models.DateTimeField(verbose_name="Last Used Date")
   description = RichTextField()
   created_date = models.DateTimeField(auto_now_add = True, verbose_name="Created Date")
   product_image = models.ManyToManyField("ProductImage", verbose_name = "ProductImages")

我不确定,应该是manytomanyfield?

forms.py

from django import forms
from .models import Product, Category, Size, Color, Brand, Shipping, Comission, ProductImage
from betterforms.multiform import MultiModelForm

class ProductForm(forms.ModelForm):
    class Meta:
        model = Product
        fields = ["category","title", "description","price", "income", "active_product",]
        images = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}))

class ProductImageForm(forms.ModelForm):
    class Meta:
        model = ProductImage
        fields = ["cover_image","product_image"]


class ProductMultiForm(forms.ModelForm):
        form_classes = {
            'product': ProductForm,
            'images': ProductImageForm,
        }

我刚刚尝试连接两个类。

事情太复杂了。

views.py

from django.shortcuts import render, HttpResponse, redirect, get_object_or_404
from .forms import ProductForm
from django.contrib import messages
from .models import Product, Category, Size, Color, Brand, Shipping, Comission, ProductImage
from .forms import ProductMultiForm
from django.views.generic import UpdateView, CreateView
from django.http import JsonResponse
from django.views import View

class ProductMultiForm(request):
    form = ProductMultiForm
    def form_valid(self, form):
        product = form['product'].save()
        images = form['images'].save(commit=False)
        product.seller = request.user
        product.save()

        images.save()
        messages.success(CreateView,"Product created successful!")
        return redirect("index")

        form = ProductMultiForm(request.POST or None, request.FILES or None)
        product = form.save(commit=False)
        images = form.save(commit=False)
        product.seller = request.user
        images.product_id = product.id
        product.save()
        images.save()
        messages.success(self,"Product created successful!")
        return redirect("index")

最佳答案

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

相关文章:

python - 如何使用 API 创建多个 Trello 卡片?

python - Django 内置登录系统 - 帐户/个人资料/未找到

django - 找不到自定义上下文处理器?

django - 我可以在条件扩展页面中使用 djangocms 插件吗?

php - 在 MySQL 中将日期 POST 到日期时间的正确方法

python - 从 matplotlib 图中删除白色背景

python - 在 Python 2 中检查字符串是否以小数结尾

Python 请求调用因 HTTPS 而失败

javascript - $ ("#id option").隐藏();不在 safari/chrome 上工作?

C 应用程序之上的 C++ UI 表单