【问题标题】:How to make upload multiple files in single form at Django?如何在 Django 中以单一形式上传多个文件?
【发布时间】:2019-06-27 13:42:12
【问题描述】:

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

我使用了 betterforms 模块,但我做不到。

model.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 forms file-upload


    【解决方案1】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-21
      • 2013-12-11
      • 1970-01-01
      • 2014-06-04
      • 2014-03-29
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      相关资源
      最近更新 更多