gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:18:28 24 4
gpt4 key购买 nike

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com