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)
def get(self, request, pk): product = get_object_or_404(Product, pk=pk) form = CreateProductForm(instance=product) formset = ImagesFormSet(queryset=product.images.all()) return render(request, 'product/edit.html', locals())
def get(self, request): form = CreateProductForm() formset = ImagesFormSet(queryset=ProductImage.objects.none()) return render(request, 'product/create.html', locals())
def createProduct(request): if request.method == 'GET': form = CreateProductForm() return render(request, 'products/create.html', {'form': form}) if request.method == 'POST': form = CreateProductForm(request.POST, request.FILES) if form.is_valid(): if form.cleaned_data['ubicaciones'] == None and form.cleaned_data[ 'nombreComercio'] == "": form.errors.nombreComercio = "El campo Nombre del Comercio no puede estar vacío si añade una ubicación nueva" return render(request, 'products/create.html', {'form': form}) path = default_storage.save( form.cleaned_data['foto'].name, ContentFile(form.cleaned_data['foto'].read())) nombre = form.cleaned_data["nombre"] descripcion = form.cleaned_data["descripcion"] precio = form.cleaned_data["precio"] dieta = form.cleaned_data['dieta'] ubicacion = form.cleaned_data['ubicaciones'] categoria = form.cleaned_data['categoria'] # Valores nutricionales calorias = form.cleaned_data['calorias'] grasas = form.cleaned_data['grasas'] grasas_saturadas = form.cleaned_data['grasas_saturadas'] hidratos = form.cleaned_data['hidratos'] azucares = form.cleaned_data['azucares'] fibra = form.cleaned_data['fibra'] proteinas = form.cleaned_data['proteinas'] sal = form.cleaned_data['sal'] mayorEdad = form.cleaned_data['mayorEdad'] producto = Producto(titulo=nombre, descripcion=descripcion, foto=path, precioMedio=precio, estado="Pendiente", calorias=calorias, grasas=grasas, grasas_saturadas=grasas_saturadas, hidratos=hidratos, azucares=azucares, fibra=fibra, proteinas=proteinas, sal=sal, mayorEdad=mayorEdad, user=get_object_or_404(Perfil, user=request.user)) producto.save() for d in dieta: producto.dietas.add(get_object_or_404(Dieta, nombre=d)) for c in categoria: producto.categorias.add(get_object_or_404(Categoria, nombre=c)) # Por cada pequemercado crear tabla intermedia if (form.cleaned_data['nombreComercio'] != '' and form.cleaned_data['lat'] != '' and form.cleaned_data['lon'] != ''): ubicacion = Ubicacion( nombre=form.cleaned_data['nombreComercio'], latitud=form.cleaned_data['lat'], longitud=form.cleaned_data['lon']) ubicacion.save() ubicacionProducto = UbicacionProducto(producto=producto, ubicacion=ubicacion, user=get_object_or_404( Perfil, user=request.user), precio=precio) ubicacionProducto.save() # Por cada supermercado crear tabla intermedia else: ubicacionProducto = UbicacionProducto( producto=producto, ubicacion=ubicacion, user=get_object_or_404(Perfil, user=request.user), precio=form.cleaned_data['precio']) ubicacionProducto.save() producto.save() return redirect('product:list') else: return render(request, 'products/create.html', {'form': form})