remotes/origin/mitri4
spacenergy 10 years ago
parent c96d64a15b
commit 030ee7d462
  1. 2
      accounts/models.py
  2. 4
      batiskaf/templates/jinja2/base.jinja
  3. 11
      store/admin.py
  4. 23
      store/cart.py
  5. 29
      store/migrations/0051_cartmodel.py
  6. 7
      store/models.py

@ -49,7 +49,7 @@ class Profile(AbstractBaseUser):
verbose_name_plural = 'пользователи' verbose_name_plural = 'пользователи'
def __str__(self): def __str__(self):
return self.phone return '{} ({} {})'.format(self.phone, self.first_name, self.last_name)
def get_full_name(self): def get_full_name(self):
return '{} {}'.format(self.first_name, self.last_name) return '{} {}'.format(self.first_name, self.last_name)

@ -58,9 +58,9 @@
<a href="/"><img src="/static/img/logo.png" alt="Батискаф-Казахстан" title="Батискаф-Казахстан" width="457" <a href="/"><img src="/static/img/logo.png" alt="Батискаф-Казахстан" title="Батискаф-Казахстан" width="457"
height="104"/></a> height="104"/></a>
</div> </div>
<div class="quick-access-container"> <div class="quick-access-container" style='width:50%;'>
<form action="/store/search/" method="get"> <form action="/store/search/" method="get">
<input type="text" placeholder="Что ищем?" name="q" value="{{ request.GET['q']|default('') }}"/> <input type="text" placeholder="Что ищем?" name="q" value="{{ request.GET['q']|default('') }}" style='width:85%;background-color: #f1f2f6;'/>
<button type="submit"><span class="glyphicon glyphicon-search" aria-hidden="true"></span></button> <button type="submit"><span class="glyphicon glyphicon-search" aria-hidden="true"></span></button>
</form> </form>
<p class="small-welcome">Добро пожаловать в интернет-магазин Батискаф!</p> <p class="small-welcome">Добро пожаловать в интернет-магазин Батискаф!</p>

@ -17,6 +17,17 @@ class BrandAdmin(admin.ModelAdmin):
list_display = ('title',) list_display = ('title',)
prepopulated_fields = {"slug": ("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) # @admin.register(Image)
# class ImageAdmin(admin.ModelAdmin): # class ImageAdmin(admin.ModelAdmin):

@ -1,6 +1,6 @@
from store.models import ProductVariation from store.models import ProductVariation
import uuid import uuid
from .models import CartModel
class CartItem(object): class CartItem(object):
subtotal = 0 subtotal = 0
@ -29,11 +29,17 @@ class Cart(object):
total = 0 total = 0
weight = 0.1 weight = 0.1
items_format = {'items': [], 'total': 0} items_format = {'items': [], 'total': 0}
cart_id = ''
def __init__(self, request): def __init__(self, request):
self.items = [] self.items = []
self.request = request self.request = request
self.total = 0 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: try:
self.json_items = request.session['store_cart'] self.json_items = request.session['store_cart']
if not self.json_items: if not self.json_items:
@ -42,6 +48,17 @@ class Cart(object):
self.json_items = self.items_format self.json_items = self.items_format
self.deserialize_items() 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): def deserialize_items(self):
for j in self.json_items['items']: for j in self.json_items['items']:
variation = None variation = None
@ -73,6 +90,7 @@ class Cart(object):
self.items.append(item) self.items.append(item)
self.total += item.subtotal self.total += item.subtotal
self.serialize_items() self.serialize_items()
self.update_model()
return self return self
def remove_item(self, item_id): def remove_item(self, item_id):
@ -81,6 +99,7 @@ class Cart(object):
self.items.remove(i) self.items.remove(i)
self.total -= i.subtotal self.total -= i.subtotal
self.serialize_items() self.serialize_items()
self.update_model()
return self return self
def update_items(self): def update_items(self):
@ -103,9 +122,11 @@ class Cart(object):
item.subtotal = item.get_price() * item.count item.subtotal = item.get_price() * item.count
self.total += item.subtotal self.total += item.subtotal
self.serialize_items() self.serialize_items()
self.update_model()
def clear(self): def clear(self):
self.items = [] self.items = []
self.json_items = [] self.json_items = []
self.total = 0 self.total = 0
self.request.session['store_cart'] = None self.request.session['store_cart'] = None
self.update_model()

@ -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)),
],
),
]

@ -24,6 +24,13 @@ def photo_filename(instance, filename):
return 'photo_uploads/' + slugify_filename(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): class Category(models.Model):
title = models.CharField('Наименование', max_length=256, default='') title = models.CharField('Наименование', max_length=256, default='')

Loading…
Cancel
Save