如何使单一形式上传多个文件Django的?

问题描述 投票:1回答:1

我有一个增加新的项目在我的电子商务项目销售产品的形式,它有标题,描述,价格,品牌,规模方面,我想为把产品图片添加区,我可以上传与FileField或单个文件的形式,但我需要上传多个文件,并插入到不同的关系文件模型与我的产品模型(产品类从不同的相关类获取图像)。我怎样才能用单一的形式做呢?我觉得我是如此接近解决,但我不正确的方式。

我用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个回答
© www.soinside.com 2019 - 2024. All rights reserved.