У меня есть форма продукта, в которой добавляется новый товар для продажи в моем проекте электронной коммерции, в нем есть заголовок, описание, цена, марка, размеры, и я хочу добавить область для размещения изображений продукта, я могу загрузить один файл с полем файла вформы, но мне нужно загрузить несколько файлов и вставить в другую модель файла отношений с моей моделью продукта (класс продукта получает изображения из другого связанного класса).Как я могу сделать это с одной формой?Я думаю, что я так близок к решению, но я не прав.
Я использовал модуль более качественных форм, но не смог.
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")