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

时间:2019-02-03 17:32:02

标签: python django forms file-upload

我有一个在我的电子商务项目中添加要出售的新商品的产品表格,其中包含标题,描述,价格,品牌,尺寸区域,并且我想添加放置产品图片的区域,我可以在表单,但我需要上传多个文件,并使用我的产品模型插入到不同的关系文件模型中(产品类从不同的相关类中获取图像)。如何使用单一表格?我认为我已经很接近解决了,但方法不正确。

我使用了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")

我不确定,应该是多场比赛吗?

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")

1 个答案:

答案 0 :(得分:0)