diff --git a/db.sqlite3 b/db.sqlite3 index 9b79008..2cd7f14 100644 Binary files a/db.sqlite3 and b/db.sqlite3 differ 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/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 @@