diff --git a/accounts/models.py b/accounts/models.py
index ac13957..c2c8a2a 100644
--- a/accounts/models.py
+++ b/accounts/models.py
@@ -49,7 +49,7 @@ class Profile(AbstractBaseUser):
verbose_name_plural = 'пользователи'
def __str__(self):
- return self.phone
+ return '{} ({} {})'.format(self.phone, self.first_name, self.last_name)
def get_full_name(self):
return '{} {}'.format(self.first_name, self.last_name)
diff --git a/batiskaf/templates/jinja2/base.jinja b/batiskaf/templates/jinja2/base.jinja
index 6cd2a2a..af0ba26 100644
--- a/batiskaf/templates/jinja2/base.jinja
+++ b/batiskaf/templates/jinja2/base.jinja
@@ -58,9 +58,9 @@
-
Добро пожаловать в интернет-магазин Батискаф!
diff --git a/store/admin.py b/store/admin.py index 177a5e2..5ac15fe 100644 --- a/store/admin.py +++ b/store/admin.py @@ -17,6 +17,17 @@ class BrandAdmin(admin.ModelAdmin): list_display = ('title',) prepopulated_fields = {"slug": ("title",)} +@admin.register(CartModel) +class CartModelAdmin(admin.ModelAdmin): + list_display = ('cart_id', 'profile', 'items', 'weight', 'total') + +# class CartModel(models.Model): +# cart_id = models.CharField('Сессия', max_length=256, default='') +# profile = models.ForeignKey(Profile, default=None, null=True, blank=False, +# related_name='carts') +# items = models.TextField('Товары', default='') +# weight = models.CharField('Вес', max_length=20, default='0') +# total = models.CharField('Итого тенге', max_length=20, default='0') # @admin.register(Image) # class ImageAdmin(admin.ModelAdmin): diff --git a/store/cart.py b/store/cart.py index c8bfa11..abe06df 100644 --- a/store/cart.py +++ b/store/cart.py @@ -1,6 +1,6 @@ from store.models import ProductVariation import uuid - +from .models import CartModel class CartItem(object): subtotal = 0 @@ -29,11 +29,17 @@ class Cart(object): total = 0 weight = 0.1 items_format = {'items': [], 'total': 0} + cart_id = '' def __init__(self, request): self.items = [] self.request = request self.total = 0 + self.cart_id = request.session.get('cart_id', None) + if not self.cart_id: + _uuid = str(uuid.uuid4()) + self.cart_id = _uuid + request.session['cart_id'] = _uuid try: self.json_items = request.session['store_cart'] if not self.json_items: @@ -42,6 +48,17 @@ class Cart(object): self.json_items = self.items_format self.deserialize_items() + def update_model(self): + cart_object, created = CartModel.objects.get_or_create(cart_id=self.cart_id) + _json_items = map(lambda items: {'{} ({})'.format(items.item.product.title, items.item.variation) : items.count}, self.items) + cart_object.items = str(list(_json_items)) + cart_object.weight = self.weight + cart_object.total = self.total + if self.request.user.is_authenticated(): + cart_object.profile = self.request.user + cart_object.save() + + def deserialize_items(self): for j in self.json_items['items']: variation = None @@ -73,6 +90,7 @@ class Cart(object): self.items.append(item) self.total += item.subtotal self.serialize_items() + self.update_model() return self def remove_item(self, item_id): @@ -81,6 +99,7 @@ class Cart(object): self.items.remove(i) self.total -= i.subtotal self.serialize_items() + self.update_model() return self def update_items(self): @@ -103,9 +122,11 @@ class Cart(object): item.subtotal = item.get_price() * item.count self.total += item.subtotal self.serialize_items() + self.update_model() def clear(self): self.items = [] self.json_items = [] self.total = 0 self.request.session['store_cart'] = None + self.update_model() diff --git a/store/migrations/0051_cartmodel.py b/store/migrations/0051_cartmodel.py new file mode 100644 index 0000000..0d908ed --- /dev/null +++ b/store/migrations/0051_cartmodel.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.3 on 2016-03-14 11:26 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('store', '0050_auto_20160312_1628'), + ] + + operations = [ + migrations.CreateModel( + name='CartModel', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('cart_id', models.CharField(default='', max_length=256, verbose_name='Сессия')), + ('items', models.TextField(default='', verbose_name='Товары')), + ('weight', models.CharField(default='0', max_length=20, verbose_name='Вес')), + ('total', models.CharField(default='0', max_length=20, verbose_name='Итого тенге')), + ('profile', models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='carts', to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/store/models.py b/store/models.py index 6277403..fed34cb 100644 --- a/store/models.py +++ b/store/models.py @@ -24,6 +24,13 @@ def photo_filename(instance, filename): return 'photo_uploads/' + slugify_filename(filename) +class CartModel(models.Model): + cart_id = models.CharField('Сессия', max_length=256, default='') + profile = models.ForeignKey(Profile, default=None, null=True, blank=False, + related_name='carts') + items = models.TextField('Товары', default='') + weight = models.CharField('Вес', max_length=20, default='0') + total = models.CharField('Итого тенге', max_length=20, default='0') class Category(models.Model): title = models.CharField('Наименование', max_length=256, default='')