def create_product(request): ImageFormSet = modelformset_factory(Media, form=ImageForm, extra=3) AttributeFormSet = modelformset_factory(PrAttribute, form=CreatePrAttribute, extra=3) CatAttr = CatAttribute.objects.all() if request.method == 'POST': ProductForm = CreateProductForm(request.POST) AttributeForm = AttributeFormSet(request.POST, request.FILES, queryset=PrAttribute.objects.none()) formset = ImageFormSet(request.POST, request.FILES, queryset=Media.objects.none()) if ProductForm.is_valid() and formset.is_valid( ) and AttributeForm.is_valid(): product_form = ProductForm.save(commit=False) product_form.user = request.user product_form.save() for form in formset.cleaned_data: # this helps to not crash if the user # do not upload all the photos if form: image = form['media_file'] photo = Media(product=product_form, media_file=image) photo.save() # use django messages framework messages.success(request, "Yeeew, check it out on the home page!") for form in AttributeForm.cleaned_data: if form: value = form['value'] attr = PrAttribute(product=product_form, value=value, name=14) attr.save() return HttpResponseRedirect("/") else: print(ProductForm.errors, formset.errors, AttributeForm.errors) else: ProductForm = CreateProductForm() formset = ImageFormSet(queryset=Media.objects.none()) AttributeForm = AttributeFormSet(queryset=PrAttribute.objects.none()) return render( request, 'product/create_product.html', { 'ProductForm': ProductForm, 'formset': formset, 'Attribute': AttributeForm, 'CatAttr': CatAttr })
def post(self, request): form = CreateProductForm(request.POST) formset = ImagesFormSet(request.POST, request.FILES, queryset=ProductImage.objects.none()) if form.is_valid() and formset.is_valid(): product = form.save() for form in formset.cleaned_data: image = form.get('image') if image is not None: pic = ProductImage(product=product, image=image) pic.save() return redirect(product.get_absolute_url()) else: print(form.errors, formset.errors)
def post(self, request, pk): product = get_object_or_404(Product, pk=pk) form = CreateProductForm(instance=product, data=request.POST) formset = ImagesFormSet(request.POST, request.FILES, queryset=product.images.all()) if form.is_valid() and formset.is_valid(): product = form.save() print(formset.deleted_forms) for form in formset.cleaned_data: image = form.get('image') if image is not None and not ProductImage.objects.filter(product=product, image=image).exists(): pic = ProductImage(product=product, image=image) pic.save() for form in formset.deleted_forms: print(form.cleaned_data) image = form.cleaned_data.get('id') if image is not None: image.delete() return redirect(product.get_absolute_url()) else: print(form.errors, formset.errors)