From 294de406a5ad476d28efc10fcbe99adeea1da43e Mon Sep 17 00:00:00 2001 From: Dchamel Date: Tue, 25 Apr 2023 23:34:25 +0400 Subject: [PATCH 1/2] - Coding Medved -- Changes for Python 3.10 -- Django 4.2 --- db.sqlite3 | Bin 83968 -> 88064 bytes landing/admin.py | 6 +-- landing/forms.py | 2 +- .../0004_subscribers_delete_subscriber.py | 28 ++++++++++ landing/models.py | 10 ++-- landing/urls.py | 7 ++- landing/views.py | 2 +- orders/admin.py | 8 +-- ..._alter_productinbasket_options_and_more.py | 40 ++++++++++++++ orders/models.py | 49 +++++++++--------- orders/urls.py | 7 ++- orders/views.py | 17 ++---- ..._alter_productcategory_options_and_more.py | 30 +++++++++++ products/models.py | 18 +++---- products/urls.py | 6 +-- test_project/urls.py | 10 ++-- 16 files changed, 163 insertions(+), 77 deletions(-) create mode 100644 landing/migrations/0004_subscribers_delete_subscriber.py create mode 100644 orders/migrations/0008_alter_order_options_alter_productinbasket_options_and_more.py create mode 100644 products/migrations/0007_alter_product_options_alter_productcategory_options_and_more.py diff --git a/db.sqlite3 b/db.sqlite3 index 9b79008b1259df135d1fdad761ec9d20764cec94..4136a3398c9dd876ec0183d813471dcbe1557f5a 100644 GIT binary patch delta 5303 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 delta 2237 zcmZ`(4Nz3q6~5=5x9lGatgDY zncg?|-22Ww-*@jl_nb5Qnr`?x-E#$2i4gKN-god0ynpNYa{qdXR9rRd_@5cy;gURz zxAAXy9dF^E@gw{bUdH!v8sA}(q3fqNW+{8Kz_gZ|)jZBc^=>Z0JGt;Ra#32x#X6ab zVi&uPxhBBd{D+j`Z7t*EU(mzno=gjVmssd|z}47|!*~vVf{R#2|BW^H9{rG>$H(w7 zO-di7cAFi2(3gnC69a9jp{=d&Pz>35Q=w3ZHNZx$<+4vrG8D2hvkx3>kGa;K!8ge^ zMu!GF+lB_>iRAu-Sj_BIb1_t~-8B{GH{@%x83DiyI>Yo?g__m!?Y~ z%KZ$e-=JP<0oiOE$1)9+QAH4?a?&&8gg$x}w5}d==aRPg= zk@HqznnNd$u$|31a>PgC1B239K_JzI9ev63dVAurC*raC13l5ML*9eTA(h zAO?eq#JPh3A)Q!=p*Uq=OBy(vqdjq17A2)Z3|2@Xrz}+k#VS$phNW;o45wh2LOD{X zyayOA4}9lV?ABHlWsxSTS0FTyn~4xe}rf7d-wu(-Z*}f$I?+8#9r*gefT);#vQl~H)AbUqKxHOicZYO zY|KCdQhJBp;?6!nwObFF;FMFC+$spUdU}^|uB|vl@ABvPBd+D0e?0bI(JnMvsf)jM z-=W0OX!npjr1TDUCXNI{gWX5FkAA(QKk>xDc%VPA-=y7bPLtN?h?8J|4#7ckmQUAk z=yEGfv$G?|$F#GT(S4&%9R9)N+r843h&A#2ktgaHa zkZUoGgd}~nd|#EzqR0Lqj6_5|t3MuAXPsbI-ztWnTF4VdHI;y+(34CJJ-P|62ybzp zKa2Zu3%cpWiQv;* zyi8u^zWugoq_|FRe>egoUtx!TQK?I%IWsM7b);q`PIt-SL|<&EW3a6&R>G?Y?6OB9 z@XQ8P+6FduZ$Wn-(!XR&OF=^H+)~l!7NX-pR{Qfu+0`o%HgKf?Jlgzt3?^R?(lLXa zX8JQlOg22Foj%j*m^|?vG{Cb((PD4o<#eLdzC36AN#Vh|!{F zHs3}|9sQriz}kEPOE;MBXv|($0V5vnQyXhv?40~3lv}wPK_oN>PJu{w!ki`JErrpH7Z zh@EE%-r(8)ww94y!|NI$dD`}z6QF*)9*Vs-Y9+XYGx#$+jmPi^w)3=iqaBgnp!4)y z`Ud?zeVWE;1NBlXzwbOuS(efQ#{*%unXmGRfv~oj+N25L&)+d6RKgux z%@4lPcG5R#6I=t$x~3nt#O-DR6pfJxF*e0}+BcLgtR&KMZ4HE~g0eRll4LRbr4^-0 z_IqU|EC<7CuL#bE+H=grXyBzhLZInO#=$Co&>N_f{r;M1& diff --git a/landing/admin.py b/landing/admin.py index f09eb1e..912fd32 100644 --- a/landing/admin.py +++ b/landing/admin.py @@ -4,7 +4,7 @@ class SubscriberAdmin (admin.ModelAdmin): # list_display = ["name", "email"] - list_display = [field.name for field in Subscriber._meta.fields] + list_display = [field.name for field in Subscribers._meta.fields] list_filter = ['name',] search_fields = ['name', 'email'] @@ -18,6 +18,6 @@ class SubscriberAdmin (admin.ModelAdmin): # search_fields = ['category', 'subCategory', 'suggestKeyword'] class Meta: - model = Subscriber + model = Subscribers -admin.site.register(Subscriber, SubscriberAdmin) \ No newline at end of file +admin.site.register(Subscribers, SubscriberAdmin) \ No newline at end of file diff --git a/landing/forms.py b/landing/forms.py index 2029359..4a0dd9b 100644 --- a/landing/forms.py +++ b/landing/forms.py @@ -5,6 +5,6 @@ class SubscriberForm(forms.ModelForm): class Meta: - model = Subscriber + model = Subscribers exclude = [""] diff --git a/landing/migrations/0004_subscribers_delete_subscriber.py b/landing/migrations/0004_subscribers_delete_subscriber.py new file mode 100644 index 0000000..d3fb53b --- /dev/null +++ b/landing/migrations/0004_subscribers_delete_subscriber.py @@ -0,0 +1,28 @@ +# Generated by Django 4.2 on 2023-04-25 16:42 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('landing', '0003_auto_20170122_1651'), + ] + + operations = [ + migrations.CreateModel( + name='Subscribers', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('email', models.EmailField(max_length=254)), + ('name', models.CharField(max_length=50)), + ], + options={ + 'verbose_name': 'Subscriber', + 'verbose_name_plural': 'Subscribers', + }, + ), + migrations.DeleteModel( + name='Subscriber', + ), + ] diff --git a/landing/models.py b/landing/models.py index 03b1de8..b865bbf 100644 --- a/landing/models.py +++ b/landing/models.py @@ -1,13 +1,13 @@ from django.db import models -class Subscriber(models.Model): +class Subscribers(models.Model): email = models.EmailField() - name = models.CharField(max_length=128) + name = models.CharField(max_length=50) def __str__(self): - return "Пользователь %s %s" % (self.name, self.email,) + return 'Id: %s, Login: %s' % (self.name, self.email,) class Meta: - verbose_name = 'MySubscriber' - verbose_name_plural = 'A lot of Subscribers' \ No newline at end of file + verbose_name = 'Subscriber' + verbose_name_plural = 'Subscribers' \ No newline at end of file diff --git a/landing/urls.py b/landing/urls.py index 2f715c4..a535b2d 100644 --- a/landing/urls.py +++ b/landing/urls.py @@ -13,11 +13,10 @@ 1. Import the include() function: from django.conf.urls import url, include 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) """ -from django.conf.urls import url, include -from django.contrib import admin +from django.urls import path from landing import views urlpatterns = [ - url(r'^$', views.home, name='home'), - url(r'^landing123/$', views.landing, name='landing'), + path('', views.home, name='home'), + path('landing', views.landing, name='landing'), ] diff --git a/landing/views.py b/landing/views.py index 26df964..9768f68 100644 --- a/landing/views.py +++ b/landing/views.py @@ -5,7 +5,7 @@ def landing(request): name = "CodingMedved" - current_day = "03.01.2017" + current_day = "24.04.2023" form = SubscriberForm(request.POST or None) if request.method == "POST" and form.is_valid(): diff --git a/orders/admin.py b/orders/admin.py index 14df511..5be9068 100644 --- a/orders/admin.py +++ b/orders/admin.py @@ -7,7 +7,7 @@ class ProductInOrderInline(admin.TabularInline): extra = 0 -class StatusAdmin (admin.ModelAdmin): +class StatusAdmin(admin.ModelAdmin): list_display = [field.name for field in Status._meta.fields] class Meta: @@ -16,7 +16,7 @@ class Meta: admin.site.register(Status, StatusAdmin) -class OrderAdmin (admin.ModelAdmin): +class OrderAdmin(admin.ModelAdmin): list_display = [field.name for field in Order._meta.fields] inlines = [ProductInOrderInline] @@ -26,7 +26,7 @@ class Meta: admin.site.register(Order, OrderAdmin) -class ProductInOrderAdmin (admin.ModelAdmin): +class ProductInOrderAdmin(admin.ModelAdmin): list_display = [field.name for field in ProductInOrder._meta.fields] class Meta: @@ -35,7 +35,7 @@ class Meta: admin.site.register(ProductInOrder, ProductInOrderAdmin) -class ProductInBasketAdmin (admin.ModelAdmin): +class ProductInBasketAdmin(admin.ModelAdmin): list_display = [field.name for field in ProductInBasket._meta.fields] class Meta: diff --git a/orders/migrations/0008_alter_order_options_alter_productinbasket_options_and_more.py b/orders/migrations/0008_alter_order_options_alter_productinbasket_options_and_more.py new file mode 100644 index 0000000..9c131dc --- /dev/null +++ b/orders/migrations/0008_alter_order_options_alter_productinbasket_options_and_more.py @@ -0,0 +1,40 @@ +# Generated by Django 4.2 on 2023-04-25 16:42 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('orders', '0007_order_user'), + ] + + operations = [ + migrations.AlterModelOptions( + name='order', + options={'verbose_name': 'Order', 'verbose_name_plural': 'Orders'}, + ), + migrations.AlterModelOptions( + name='productinbasket', + options={'verbose_name': 'Product in Cart', 'verbose_name_plural': 'Products in Cart'}, + ), + migrations.AlterModelOptions( + name='productinorder', + options={'verbose_name': 'Product in order', 'verbose_name_plural': 'Products in order'}, + ), + migrations.AlterModelOptions( + name='status', + options={'verbose_name': 'Status', 'verbose_name_plural': 'Statuses'}, + ), + migrations.AlterField( + model_name='order', + name='customer_name', + field=models.CharField(blank=True, default=None, max_length=50, null=True), + ), + migrations.AlterField( + model_name='order', + name='status', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='orders.status'), + ), + ] diff --git a/orders/models.py b/orders/models.py index 4e4aadd..7b44533 100644 --- a/orders/models.py +++ b/orders/models.py @@ -12,31 +12,34 @@ class Status(models.Model): updated = models.DateTimeField(auto_now_add=False, auto_now=True) def __str__(self): - return "Статус %s" % self.name + return 'Status %s' % self.name class Meta: - verbose_name = 'Статус заказа' - verbose_name_plural = 'Статусы заказа' + verbose_name = 'Status' + verbose_name_plural = 'Statuses' class Order(models.Model): - user = models.ForeignKey(User, blank=True, null=True, default=None) + user = models.ForeignKey(User, blank=True, null=True, default=None, on_delete=models.CASCADE) total_price = models.DecimalField(max_digits=10, decimal_places=2, default=0)#total price for all products in order - customer_name = models.CharField(max_length=64, blank=True, null=True, default=None) + customer_name = models.CharField(max_length=50, blank=True, null=True, default=None) customer_email = models.EmailField(blank=True, null=True, default=None) customer_phone = models.CharField(max_length=48, blank=True, null=True, default=None) customer_address = models.CharField(max_length=128, blank=True, null=True, default=None) comments = models.TextField(blank=True, null=True, default=None) - status = models.ForeignKey(Status) + status = models.ForeignKey(Status, on_delete=models.CASCADE, null=True) created = models.DateTimeField(auto_now_add=True, auto_now=False) updated = models.DateTimeField(auto_now_add=False, auto_now=True) def __str__(self): - return "Заказ %s %s" % (self.id, self.status.name) + if self.status is not None: + return 'Order %s %s' % (self.id, self.status.name) + else: + return 'Order %s' % (self.id) class Meta: - verbose_name = 'Заказ' - verbose_name_plural = 'Заказы' + verbose_name = 'Order' + verbose_name_plural = 'Orders' def save(self, *args, **kwargs): @@ -44,8 +47,8 @@ def save(self, *args, **kwargs): class ProductInOrder(models.Model): - order = models.ForeignKey(Order, blank=True, null=True, default=None) - product = models.ForeignKey(Product, blank=True, null=True, default=None) + order = models.ForeignKey(Order, blank=True, null=True, default=None, on_delete=models.CASCADE) + product = models.ForeignKey(Product, blank=True, null=True, default=None, on_delete=models.CASCADE) nmb = models.IntegerField(default=1) price_per_item = models.DecimalField(max_digits=10, decimal_places=2, default=0) total_price = models.DecimalField(max_digits=10, decimal_places=2, default=0)#price*nmb @@ -57,16 +60,13 @@ def __str__(self): return "%s" % self.product.name class Meta: - verbose_name = 'Товар в заказе' - verbose_name_plural = 'Товары в заказе' + verbose_name = 'Product in order' + verbose_name_plural = 'Products in order' def save(self, *args, **kwargs): - price_per_item = self.product.price - self.price_per_item = price_per_item - print (self.nmb) - - self.total_price = int(self.nmb) * price_per_item + self.price_per_item = self.product.price + self.total_price = int(self.nmb) * self.price_per_item super(ProductInOrder, self).save(*args, **kwargs) @@ -89,8 +89,8 @@ def product_in_order_post_save(sender, instance, created, **kwargs): class ProductInBasket(models.Model): session_key = models.CharField(max_length=128, blank=True, null=True, default=None) - order = models.ForeignKey(Order, blank=True, null=True, default=None) - product = models.ForeignKey(Product, blank=True, null=True, default=None) + order = models.ForeignKey(Order, blank=True, null=True, default=None, on_delete=models.CASCADE) + product = models.ForeignKey(Product, blank=True, null=True, default=None, on_delete=models.CASCADE) nmb = models.IntegerField(default=1) price_per_item = models.DecimalField(max_digits=10, decimal_places=2, default=0) total_price = models.DecimalField(max_digits=10, decimal_places=2, default=0)#price*nmb @@ -102,13 +102,12 @@ def __str__(self): return "%s" % self.product.name class Meta: - verbose_name = 'Товар в корзине' - verbose_name_plural = 'Товары в корзине' + verbose_name = 'Product in Cart' + verbose_name_plural = 'Products in Cart' def save(self, *args, **kwargs): - price_per_item = self.product.price - self.price_per_item = price_per_item - self.total_price = int(self.nmb) * price_per_item + self.price_per_item = self.product.price + self.total_price = int(self.nmb) * self.price_per_item super(ProductInBasket, self).save(*args, **kwargs) \ No newline at end of file diff --git a/orders/urls.py b/orders/urls.py index 0521a62..9c395f3 100644 --- a/orders/urls.py +++ b/orders/urls.py @@ -13,13 +13,12 @@ 1. Import the include() function: from django.conf.urls import url, include 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) """ -from django.conf.urls import url, include -from django.contrib import admin +from django.urls import path from . import views urlpatterns = [ - url(r'^basket_adding/$', views.basket_adding, name='basket_adding'), - url(r'^checkout/$', views.checkout, name='checkout'), + path('basket_adding', views.basket_adding, name='basket_adding'), + path('checkout', views.checkout, name='checkout'), ] diff --git a/orders/views.py b/orders/views.py index a8b30a0..c346824 100644 --- a/orders/views.py +++ b/orders/views.py @@ -1,4 +1,4 @@ -from django.http import JsonResponse, HttpResponse, HttpResponseRedirect +from django.http import JsonResponse, HttpResponseRedirect from .models import * from django.shortcuts import render from .forms import CheckoutContactForm @@ -26,9 +26,7 @@ def basket_adding(request): #common code for 2 cases products_in_basket = ProductInBasket.objects.filter(session_key=session_key, is_active=True, order__isnull=True) - products_total_nmb = products_in_basket.count() - return_dict["products_total_nmb"] = products_total_nmb - + return_dict["products_total_nmb"] = products_in_basket.count() return_dict["products"] = list() for item in products_in_basket: @@ -45,22 +43,17 @@ def basket_adding(request): def checkout(request): session_key = request.session.session_key products_in_basket = ProductInBasket.objects.filter(session_key=session_key, is_active=True, order__isnull=True) - print (products_in_basket) - for item in products_in_basket: - print(item.order) - - form = CheckoutContactForm(request.POST or None) if request.POST: print(request.POST) if form.is_valid(): print("yes") data = request.POST - name = data.get("name", "3423453") + name = data.get("name", "None") phone = data["phone"] user, created = User.objects.get_or_create(username=phone, defaults={"first_name": name}) - order = Order.objects.create(user=user, customer_name=name, customer_phone=phone, status_id=1) + order = Order.objects.create(user=user, customer_name=name, customer_phone=phone, status_id=None) for name, value in data.items(): if name.startswith("product_in_basket_"): @@ -68,7 +61,7 @@ def checkout(request): product_in_basket = ProductInBasket.objects.get(id=product_in_basket_id) print(type(value)) - product_in_basket.nmb = value + product_in_basket.nmb = int(value) product_in_basket.order = order product_in_basket.save(force_update=True) diff --git a/products/migrations/0007_alter_product_options_alter_productcategory_options_and_more.py b/products/migrations/0007_alter_product_options_alter_productcategory_options_and_more.py new file mode 100644 index 0000000..d8819cf --- /dev/null +++ b/products/migrations/0007_alter_product_options_alter_productcategory_options_and_more.py @@ -0,0 +1,30 @@ +# Generated by Django 4.2 on 2023-04-25 16:42 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('products', '0006_auto_20170212_1900'), + ] + + operations = [ + migrations.AlterModelOptions( + name='product', + options={'verbose_name': 'Product', 'verbose_name_plural': 'Products'}, + ), + migrations.AlterModelOptions( + name='productcategory', + options={'verbose_name': 'Product category', 'verbose_name_plural': 'Product categories'}, + ), + migrations.AlterModelOptions( + name='productimage', + options={'verbose_name': 'Photo', 'verbose_name_plural': 'Photos'}, + ), + migrations.AlterField( + model_name='productcategory', + name='name', + field=models.CharField(blank=True, default=None, max_length=50, null=True), + ), + ] diff --git a/products/models.py b/products/models.py index a7ac762..3678ab5 100644 --- a/products/models.py +++ b/products/models.py @@ -2,22 +2,22 @@ class ProductCategory(models.Model): - name = models.CharField(max_length=64, blank=True, null=True, default=None) + name = models.CharField(max_length=50, blank=True, null=True, default=None) is_active = models.BooleanField(default=True) def __str__(self): return "%s" % self.name class Meta: - verbose_name = 'Категория товара' - verbose_name_plural = 'Категория товаров' + verbose_name = 'Product category' + verbose_name_plural = 'Product categories' class Product(models.Model): name = models.CharField(max_length=64, blank=True, null=True, default=None) price = models.DecimalField(max_digits=10, decimal_places=2, default=0) discount = models.IntegerField(default=0) - category = models.ForeignKey(ProductCategory, blank=True, null=True, default=None) + category = models.ForeignKey(ProductCategory, blank=True, null=True, default=None, on_delete=models.CASCADE) short_description = models.TextField(blank=True, null=True, default=None) description = models.TextField(blank=True, null=True, default=None) is_active = models.BooleanField(default=True) @@ -28,12 +28,12 @@ def __str__(self): return "%s, %s" % (self.price, self.name) class Meta: - verbose_name = 'Товар' - verbose_name_plural = 'Товары' + verbose_name = 'Product' + verbose_name_plural = 'Products' class ProductImage(models.Model): - product = models.ForeignKey(Product, blank=True, null=True, default=None) + product = models.ForeignKey(Product, blank=True, null=True, default=None, on_delete=models.CASCADE) image = models.ImageField(upload_to='products_images/') is_main = models.BooleanField(default=False) is_active = models.BooleanField(default=True) @@ -44,5 +44,5 @@ def __str__(self): return "%s" % self.id class Meta: - verbose_name = 'Фотография' - verbose_name_plural = 'Фотографии' \ No newline at end of file + verbose_name = 'Photo' + verbose_name_plural = 'Photos' \ No newline at end of file diff --git a/products/urls.py b/products/urls.py index 8863c08..e3acf28 100644 --- a/products/urls.py +++ b/products/urls.py @@ -13,11 +13,9 @@ 1. Import the include() function: from django.conf.urls import url, include 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) """ -from django.conf.urls import url, include -from django.contrib import admin +from django.urls import re_path from products import views urlpatterns = [ - # url(r'^landing123/', views.landing, name='landing'), - url(r'^product/(?P\w+)/$', views.product, name='product'), + re_path(r'^product/(?P\w+)/$', views.product, name='product'), ] diff --git a/test_project/urls.py b/test_project/urls.py index bdf232e..840df88 100644 --- a/test_project/urls.py +++ b/test_project/urls.py @@ -13,17 +13,17 @@ 1. Import the include() function: from django.conf.urls import url, include 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) """ -from django.conf.urls import url, include +from django.urls import path, include from django.contrib import admin from django.conf import settings from django.conf.urls.static import static urlpatterns = [ - url(r'^admin/', admin.site.urls), - url(r'^', include('landing.urls')), - url(r'^', include('products.urls')), - url(r'^', include('orders.urls')), + path('admin/', admin.site.urls), + path('', include('landing.urls')), + path('', include('products.urls')), + path('', include('orders.urls')), ] \ + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) \ + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) From fd0708118e4cc6c3f61c1742c9614b14b3141c8b Mon Sep 17 00:00:00 2001 From: Dchamel Date: Wed, 26 Apr 2023 23:41:22 +0400 Subject: [PATCH 2/2] - Coding Medved -- Changes for Python 3.10 -- Django 4.2 --- db.sqlite3 | Bin 88064 -> 91136 bytes static/static_dev/js/scripts.js | 2 +- templates/navbar.html | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/db.sqlite3 b/db.sqlite3 index 4136a3398c9dd876ec0183d813471dcbe1557f5a..2cd7f14d5da878858b5c2f215aedda88e8bab241 100644 GIT binary patch delta 2577 zcmeHJTWnKh9RI%a?@HJ9Y?wVDZmiuH2BRD2($jNJ6U#K8k9WsVq^T<29BOH6ok~lN@pdjKdpbM9qxPMB zopwii--siY_DnW*S#~ht7I*ztj^X%f#!}5$%?xX^h&EoRVOa?{S*!sLaCKl`p=W%SxzbnY^+v0?%;9aHJSDFmk!-TpZ!&;Y`;^5x97vdUsOtmgSU`~tV&27CvX;cGY#XW$fk z2D9)X93~;`1*4iPU7X#El-c=K4beQJYThPwnTKnSYIBSfR<-sc93h&o=QK50O{z$l zKiOm~Dj+FhSRy;>ge9fu{Li4ivKo(H(rDh-oYyFt%MT#`m`^>nm^EffFyXSb&*bG6fF&x3 zAK(MH0-Zzw0)uVSA+rG$Qk2eaN7(H#d(3%QWvw=rz?H4xcvj+sCrcl zdU7HyPH^er)W}FY934rR*^ zRgWR1v)VYZhG#9Tys{hSS)PypO|9l<{s4<5JR|TpG;@K&y=qha<~a-28g(*)I3-i9 zgcF~qruTBj0{3gf_SG!bgqtV411_c|GG%Xz$lXIie_}^qoJOpuzmYfotSK}wh!0yp1?$~+2?mV{E0-FetYxOe5%2LvN+<|9w1#lF>QF6oH zgRXYkh)U3UL?F8cBf``FLgg|c^OYOS3z8_;{hZjhbGAlUr~{fNq7$>x%u|@coMTBno>bc zlUNJM?1qD2p%(t95OeNo|EDP=s#m*;;UMWM!QUGY?W-UJNj)=e&3C z`ObIFJ?Fl+f5Nu^6WjacMGb_IE%yWu)@aahvSn{!fyYygFMu(0V})_2upEkv64w@R z8=bCAV6(&kEt#q&DB-$>F5|kYm}IY2fM;pC2#*jOj8J+3RoVt~ zFapB>1^Gg9)(0V(S%)p-hl&ZI7 z6*R5}E3Pj^ggYBEb ztS7UfyE&{jcW+C?8@6|Jbnooe2DeE)v2|-R>r(4G)`WJbO@66kXEdD*=)sPz$A5R( zbOV?UCrlBT!cAy5mYlD4I0=P5y|>S(tSd2M=M^EpVN_lyGmb7^Tz{}=<`4v9*M*I0 z{w2$I1xS_SX8`dW8%>uG%;k=T`K(=)vbkNFMr4;9Lvc*JIYSqWP9 zl>i(ED72vFul#ReIpsx-a|v*fx#Tal+hUF}C|Io*l)Y4I6j!f!ZJw&Nzb~2S@6|I2 u_VC(yAk=0rtF48%>mDR^AN?@a(eQF(B;F{-BWpG^idFN*?CDB41%CtUqoS4o diff --git a/static/static_dev/js/scripts.js b/static/static_dev/js/scripts.js index caa4678..c51f1ea 100644 --- a/static/static_dev/js/scripts.js +++ b/static/static_dev/js/scripts.js @@ -87,7 +87,7 @@ $(document).ready(function(){ function calculatingBasketAmount(){ var total_order_amount = 0; $('.total-product-in-basket-amount').each(function() { - total_order_amount = total_order_amount + parseFloat($(this).text()); + total_order_amount += parseFloat($(this).text()); }); console.log(total_order_amount); $('#total_order_amount').text(total_order_amount.toFixed(2)); diff --git a/templates/navbar.html b/templates/navbar.html index f795c1b..7b04eb0 100644 --- a/templates/navbar.html +++ b/templates/navbar.html @@ -34,7 +34,7 @@