remotes/origin/artem
Gena 11 years ago
parent ee8cbef930
commit ef493a26a7
  1. 1
      .gitignore
  2. 2
      batiskaf/settings.py
  3. 46
      batiskaf/templates/jinja2/base.jinja
  4. 25
      batiskaf/templates/jinja2/cart_detail.jinja
  5. 32
      batiskaf/templates/jinja2/category.jinja
  6. 6
      batiskaf/templates/jinja2/includes/category_filter.jinja
  7. 38
      batiskaf/templates/jinja2/index.jinja
  8. 19
      batiskaf/templates/jinja2/product.jinja
  9. 4
      batiskaf/urls.py
  10. 2
      batiskaf/wsgi.py
  11. 50
      static/less/_.less
  12. BIN
      static/photo_uploads/6795336.5n58bodtpi.jpg
  13. BIN
      static/photo_uploads/6795336.5n58bodtpi.jpg.398x398_q85_crop-upscale.jpg
  14. BIN
      static/photo_uploads/6795336.5n58bodtpi.jpg.80x80_q85_crop-upscale.jpg
  15. BIN
      static/photo_uploads/XuAB9RCUbgA.jpg
  16. BIN
      static/photo_uploads/XuAB9RCUbgA.jpg.398x398_q85_crop-upscale.jpg
  17. BIN
      static/photo_uploads/XuAB9RCUbgA.jpg.420x420_q85_crop-upscale.jpg
  18. BIN
      static/photo_uploads/XuAB9RCUbgA.jpg.80x80_q85_crop-upscale.jpg
  19. 4
      store/admin.py
  20. 51
      store/migrations/0010_auto_20150602_0842.py
  21. 36
      store/models.py
  22. 1
      store/urls.py
  23. 2
      store/views.py

1
.gitignore vendored

@ -1,7 +1,6 @@
*.pyc *.pyc
*.pyo *.pyo
.idea .idea
.idea/workspace.xml
*.sublime-project *.sublime-project
*.sublime-workspace *.sublime-workspace
*.db *.db

@ -65,7 +65,6 @@ MIDDLEWARE_CLASSES = (
'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',
) )
ROOT_URLCONF = 'batiskaf.urls' ROOT_URLCONF = 'batiskaf.urls'
WSGI_APPLICATION = 'batiskaf.wsgi.application' WSGI_APPLICATION = 'batiskaf.wsgi.application'
@ -154,7 +153,6 @@ TEMPLATES = [
}, },
] ]
BOOTSTRAP3 = { BOOTSTRAP3 = {
# The complete URL to the Bootstrap CSS file (None means derive it from # The complete URL to the Bootstrap CSS file (None means derive it from

@ -30,8 +30,10 @@
<div class="container"> <div class="container">
<div class="top-left-links"><a href="#">Оплата</a> | <a href="#">Доставка</a> | <a href="#">Помощь</a> | <a href="#">Контакты</a></div> <div class="top-left-links"><a href="#">Оплата</a> | <a href="#">Доставка</a> | <a href="#">Помощь</a> | <a
<div class="top-right-links">В Усть-Каменогорске: <span class="yellow">+7 (812) 921-78-12</span> | В Алматы: <span class="yellow">8-800-555-78-12</span> | href="#">Контакты</a></div>
<div class="top-right-links">В Усть-Каменогорске: <span class="yellow">+7 (812) 921-78-12</span> | В Алматы:
<span class="yellow">8-800-555-78-12</span> |
<a href="#">Написать нам</a> | <a href="#"><img src="/static/img/skype.png" alt="" width="20" height="20"/></a> <a href="#">Написать нам</a> | <a href="#"><img src="/static/img/skype.png" alt="" width="20" height="20"/></a>
</div> </div>
@ -46,10 +48,15 @@
</div> </div>
<div class="quick-access-container"> <div class="quick-access-container">
<form action=""> <form action="">
<input type="text" placeholder="Что ищем?"/> <button type="submit"><span class="glyphicon glyphicon-search" aria-hidden="true"></span></button> <input type="text" placeholder="Что ищем?"/>
<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>
<p class="quick-links"><a href="#">Мой аккаунт</a> | <a href="#">Новости</a> | <a href="/store/cart/">Моя корзина {% if (request|cart).items|length > 0 %}<span class="label label-success">{{ (request|cart).items|length }}</span>{% endif %}</a> | <a href="#">Оформление заказа</a> | <a href="#">Войти</a></p>
<p class="quick-links"><a href="#">Мой аккаунт</a> | <a href="#">Новости</a> | <a href="/store/cart/">Моя
корзина {% if (request|cart).items|length > 0 %}
<span class="label label-success">{{ (request|cart).items|length }}</span>{% endif %}</a> | <a
href="#">Оформление заказа</a> | <a href="#">Войти</a></p>
</div> </div>
</div> </div>
</div> </div>
@ -63,14 +70,16 @@
<div> <div>
<ul class="nav navbar-nav"> <ul class="nav navbar-nav">
<li class="dropdown yamm-fw"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Подводная охота</a> <li class="dropdown yamm-fw"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Подводная
охота</a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li> <li>
<div class="yamm-content"> <div class="yamm-content">
<div class="row"> <div class="row">
<div class="col-xs-3 col-sm-3 col-md-3 col-lg-3"> <div class="col-xs-3 col-sm-3 col-md-3 col-lg-3">
<ul> <ul>
<li><a class="title" href="/store/spearfishing/spearguns/">Ружья</a></li> <li><a class="title" href="/store/spearfishing/spearguns/">Ружья</a>
</li>
<li><a href="#">Пневматика</a></li> <li><a href="#">Пневматика</a></li>
<li><a href="/store/spearfishing/spearguns/arbalets/">Арбалеты</a></li> <li><a href="/store/spearfishing/spearguns/arbalets/">Арбалеты</a></li>
<li><a href="#">Карбоновые арбалеты</a></li> <li><a href="#">Карбоновые арбалеты</a></li>
@ -143,7 +152,8 @@
</li> </li>
</ul> </ul>
</li> </li>
<li class="dropdown yamm-fw"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Фридайвинг</a> <li class="dropdown yamm-fw"><a href="#" data-toggle="dropdown"
class="dropdown-toggle">Фридайвинг</a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li> <li>
<div class="yamm-content"> <div class="yamm-content">
@ -152,7 +162,8 @@
</li> </li>
</ul> </ul>
</li> </li>
<li class="dropdown yamm-fw"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Отдых на воде</a> <li class="dropdown yamm-fw"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Отдых на
воде</a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li> <li>
<div class="yamm-content"> <div class="yamm-content">
@ -161,7 +172,8 @@
</li> </li>
</ul> </ul>
</li> </li>
<li class="dropdown yamm-fw"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Распродажа</a> <li class="dropdown yamm-fw"><a href="#" data-toggle="dropdown"
class="dropdown-toggle">Распродажа</a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li> <li>
<div class="yamm-content"> <div class="yamm-content">
@ -179,7 +191,8 @@
</li> </li>
</ul> </ul>
</li> </li>
<li class="dropdown yamm-fw"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Для бассейна</a> <li class="dropdown yamm-fw"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Для
бассейна</a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li> <li>
<div class="yamm-content"> <div class="yamm-content">
@ -188,7 +201,8 @@
</li> </li>
</ul> </ul>
</li> </li>
<li class="dropdown yamm-fw"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Подарочный сертификат</a> <li class="dropdown yamm-fw"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Подарочный
сертификат</a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li> <li>
<div class="yamm-content"> <div class="yamm-content">
@ -216,6 +230,7 @@
<div class="row"> <div class="row">
<div class="footer-col col-xs-4"> <div class="footer-col col-xs-4">
<span class="title">О НАС</span><br/><br/> <span class="title">О НАС</span><br/><br/>
<div class="row"> <div class="row">
<div class="col-xs-6"> <div class="col-xs-6">
<a href="#">Сеть Батискаф</a><br/> <a href="#">Сеть Батискаф</a><br/>
@ -234,6 +249,7 @@
</div> </div>
<div class="footer-col col-xs-4"> <div class="footer-col col-xs-4">
<span class="title">ОБСЛУЖИВАНИЕ КЛИЕНТОВ</span><br/><br/> <span class="title">ОБСЛУЖИВАНИЕ КЛИЕНТОВ</span><br/><br/>
<div class="row"> <div class="row">
<div class="col-xs-6"> <div class="col-xs-6">
<a href="#">Доставка</a><br/> <a href="#">Доставка</a><br/>
@ -252,6 +268,7 @@
<div class="footer-col col-xs-4 text-center col-last"> <div class="footer-col col-xs-4 text-center col-last">
<span class="title">МЫ В ИНТЕРНЕТЕ</span><br/><br/> <span class="title">МЫ В ИНТЕРНЕТЕ</span><br/><br/>
<div class="row"> <div class="row">
Кнопочки социалок Кнопочки социалок
</div> </div>
@ -259,13 +276,18 @@
</div> </div>
</div> </div>
<br/><br/> <br/><br/>
<p> <p>
<a href="#">Карта сайта</a> &nbsp;|&nbsp; <a href="#">Поисковые запросы</a> &nbsp;|&nbsp; <a href="#">Расширенный Поиск</a> &nbsp;|&nbsp; <a href="#">Контакты</a> &nbsp;|&nbsp; <a href="#">RSS</a> &nbsp;|&nbsp; <a href="#">Privacy Policy</a> <a href="#">Карта сайта</a> &nbsp;|&nbsp; <a href="#">Поисковые запросы</a> &nbsp;|&nbsp; <a href="#">Расширенный
Поиск</a> &nbsp;|&nbsp; <a href="#">Контакты</a> &nbsp;|&nbsp; <a href="#">RSS</a> &nbsp;|&nbsp; <a
href="#">Privacy Policy</a>
</p><br/> </p><br/>
<p> <p>
<a href="#">Карта сайта</a> <a href="#">Поисковые запросы</a> <a href="#">Advanced Search</a> <a <a href="#">Карта сайта</a> <a href="#">Поисковые запросы</a> <a href="#">Advanced Search</a> <a
href="#">Contact Us</a> <a href="#">RSS</a> href="#">Contact Us</a> <a href="#">RSS</a>
</p><br/> </p><br/>
<p> <p>
Все права защищены 2001-2014 © компанией Батискаф <br/> Все права защищены 2001-2014 © компанией Батискаф <br/>
ООО "Батискаф” ИНН 7801565397 ОГРН 1127847046964 от 23.01.2012г. <br/> ООО "Батискаф” ИНН 7801565397 ОГРН 1127847046964 от 23.01.2012г. <br/>

@ -31,16 +31,22 @@
<tr> <tr>
<td class="text-center"> <td class="text-center">
{% set im = item.item.product.main_image()|thumbnail("80x80") %} {% set im = item.item.product.main_image()|thumbnail("80x80") %}
<a href="{{ item.item.product.get_absolute_url() }}" ><img src="/static/{{ im.url }}" alt="" class="img-thumbnail"/></a> <a href="{{ item.item.product.get_absolute_url() }}"><img src="/static/{{ im.url }}"
alt=""
class="img-thumbnail"/></a>
</td>
<td>
<a href="{{ item.item.product.get_absolute_url() }}">{{ item.item.product.title }}</a>
</td> </td>
<td><a href="{{ item.item.product.get_absolute_url() }}" >{{ item.item.product.title }}</a></td>
<td class="text-right">{{ item.item.price }} ₸</td> <td class="text-right">{{ item.item.price }} ₸</td>
<td class="text-right"><input type="number" value="{{ item.count }}" name="{{ item.id }}" class="form-control col-xs-1"/> <td class="text-right"><input type="number" value="{{ item.count }}"
name="{{ item.id }}" class="form-control col-xs-1"/>
</td> </td>
<td class="text-right">{{ item.subtotal }} ₸</td> <td class="text-right">{{ item.subtotal }} ₸</td>
<td class="text-center"> <td class="text-center">
<a class="text-danger" href="/store/cart/remove/?id={{ item.id }}"><span class="glyphicon glyphicon-remove"></span></a> <a class="text-danger" href="/store/cart/remove/?id={{ item.id }}"><span
class="glyphicon glyphicon-remove"></span></a>
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
@ -49,7 +55,11 @@
<tfoot> <tfoot>
<tr> <tr>
<th colspan="5" class="text-right table-cart-itogo">Итого: {{ cart.total }} ₸</th> <th colspan="5" class="text-right table-cart-itogo">Итого: {{ cart.total }} ₸</th>
<th class="text-center"><button type="submit" class="btn btn-primary"><span class="glyphicon glyphicon-repeat"></span> Пересчитать</button></th> <th class="text-center">
<button type="submit" class="btn btn-primary"><span
class="glyphicon glyphicon-repeat"></span> Пересчитать
</button>
</th>
</tr> </tr>
</tfoot> </tfoot>
</table> </table>
@ -59,7 +69,10 @@
{% else %} {% else %}
<div class="alert alert-warning alert-dismissable"> <div class="alert alert-warning alert-dismissable">
<h4>Ваша корзина пуста</h4> <h4>Ваша корзина пуста</h4>
<p>Вы еще ничего не добавляли в корзину. Выберите товары и добавьте их в корзину для дальнейшего оформления покупки.</p>
<p>Вы еще ничего не добавляли в корзину. Выберите товары и добавьте их в корзину для дальнейшего
оформления покупки.</p>
<p><a class="btn btn-warning" href="/">Перейти на главную страницу</a></p> <p><a class="btn btn-warning" href="/">Перейти на главную страницу</a></p>
</div> </div>
{% endif %} {% endif %}

@ -23,14 +23,15 @@
</div> </div>
</div> </div>
<div class="col-xs-9 col-sm-9 col-md-9 col-lg-9 index-goods category-items"> <div class="col-xs-9 col-sm-9 col-md-9 col-lg-9 index-goods category-items">
<div class="category-paginator"> <div class="category-paginator">
<div class="category-paginator-top"> <div class="category-paginator-top">
<div class="row"> <div class="row">
<div class="col-xs-4">С {{ products.start_index() }} до {{ products.end_index() }} из {{ products.paginator.count }}</div> <div class="col-xs-4">С {{ products.start_index() }} до {{ products.end_index() }}
<div class="col-xs-4 text-center paginate">Страница: {% if products.has_previous() %}<a href="?page={{ products.previous_page_number() }}">&larr;</a>{% endif %} из {{ products.paginator.count }}</div>
<div class="col-xs-4 text-center paginate">Страница: {% if products.has_previous() %}
<a href="?page={{ products.previous_page_number() }}">&larr;</a>{% endif %}
{% for page in products.paginator.page_range %} {% for page in products.paginator.page_range %}
{% if page == products.number %} {% if page == products.number %}
{{ page }} {{ page }}
@ -51,7 +52,8 @@
<option value="100">100</option> <option value="100">100</option>
<option value="all">Все</option> <option value="all">Все</option>
</select> </select>
на странице</div> на странице
</div>
</div> </div>
</div> </div>
<div class="category-paginator-bottom"> <div class="category-paginator-bottom">
@ -95,20 +97,25 @@
<div class="state-yes"> <div class="state-yes">
<span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span> Товар есть в наличии <span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span> Товар
есть в наличии
</div> </div>
{% else %} {% else %}
<div class="state-no"> <div class="state-no">
{# TODO: Товар на заказ#} {# TODO: Товар на заказ#}
<span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span> Товара нет в наличии <span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span> Товара
нет в наличии
</div> </div>
{% endif %} {% endif %}
<div class="in-cart"> <div class="in-cart">
{# TODO: Сделать кнопку заказать#} {# TODO: Сделать кнопку заказать#}
{% if product.in_stock() %} {% if product.in_stock() %}
<a class="btn btn-warning btn-block" href="/store/cart/add/?pk={{ product.variations.filter(in_stock__gt=0).order_by('price').first().pk }}&count=1&next={{ request.get_full_path()|urlencode }}"><span><span class="glyphicon glyphicon-shopping-cart" aria-hidden="true"></span> Добавить в корзину</span></a> <a class="btn btn-warning btn-block"
href="/store/cart/add/?pk={{ product.variations.filter(in_stock__gt=0).order_by('price').first().pk }}&count=1&next={{ request.get_full_path()|urlencode }}"><span><span
class="glyphicon glyphicon-shopping-cart" aria-hidden="true"></span> Добавить в корзину</span></a>
{% else %} {% else %}
<a class=" btn btn-danger btn-block" href="#"><span><span class="glyphicon glyphicon-import" aria-hidden="true"></span> Заказать</span></a> <a class=" btn btn-danger btn-block" href="#"><span><span
class="glyphicon glyphicon-import" aria-hidden="true"></span> Заказать</span></a>
{% endif %} {% endif %}
</div> </div>
</div> </div>
@ -120,8 +127,13 @@
{% else %} {% else %}
<div class="alert alert-warning alert-dismissable"> <div class="alert alert-warning alert-dismissable">
<h4>Список товаров пуст</h4> <h4>Список товаров пуст</h4>
<p>Товары в данной категории или с выбранными параметрами отсутствуют. Выберите другую категорию, либо сбросьте фильтр параметров.</p>
<p><a class="btn btn-warning" href="/">Перейти на главную страницу</a> <a class="btn btn-link" href="{{ category.get_absolute_url() }}">или отменить фильтрацию</a></p> <p>Товары в данной категории или с выбранными параметрами отсутствуют. Выберите другую
категорию, либо сбросьте фильтр параметров.</p>
<p><a class="btn btn-warning" href="/">Перейти на главную страницу</a> <a class="btn btn-link"
href="{{ category.get_absolute_url() }}">или
отменить фильтрацию</a></p>
</div> </div>
{% endif %} {% endif %}
</div> </div>

@ -32,7 +32,8 @@
<ul class="attr-filter"> <ul class="attr-filter">
{% for choise in attr.choises_array %} {% for choise in attr.choises_array %}
<li> <li>
<label><input type="checkbox" name="{{ attr.attribute.slug }}[{{ loop.index0 }}]" value="{{ choise }}" <label><input type="checkbox" name="{{ attr.attribute.slug }}[{{ loop.index0 }}]"
value="{{ choise }}"
{% if choise in request.GET.getlist('%s[]'|format(attr.attribute.slug)) %} {% if choise in request.GET.getlist('%s[]'|format(attr.attribute.slug)) %}
checked="checked" checked="checked"
{% endif %}/> {{ choise }}</label> {% endif %}/> {{ choise }}</label>
@ -44,7 +45,8 @@
<ul class="attr-filter"> <ul class="attr-filter">
{% for value in attr.get_posible_values %} {% for value in attr.get_posible_values %}
<li> <li>
<label><input type="checkbox" name="{{ attr.attribute.slug }}[{{ loop.index0 }}]" value="{{ value }}"/> {{ value }}</label> <label><input type="checkbox" name="{{ attr.attribute.slug }}[{{ loop.index0 }}]"
value="{{ value }}"/> {{ value }}</label>
</li> </li>
{#TODO: Сделать разбор по фильтрам для стринга #} {#TODO: Сделать разбор по фильтрам для стринга #}
{% endfor %} {% endfor %}

@ -14,36 +14,42 @@
<div class="carousel-inner" role="listbox"> <div class="carousel-inner" role="listbox">
<div class="item active"> <div class="item active">
<img src="/static/img/banner1.jpg" alt=""> <img src="/static/img/banner1.jpg" alt="">
<div class="carousel-caption"> <div class="carousel-caption">
</div> </div>
</div> </div>
<div class="item"> <div class="item">
<img src="/static/img/banner2.jpg" alt=""> <img src="/static/img/banner2.jpg" alt="">
<div class="carousel-caption"> <div class="carousel-caption">
</div> </div>
</div> </div>
<div class="item"> <div class="item">
<img src="/static/img/banner3.jpg" alt=""> <img src="/static/img/banner3.jpg" alt="">
<div class="carousel-caption"> <div class="carousel-caption">
</div> </div>
</div> </div>
<div class="item"> <div class="item">
<img src="/static/img/banner4.jpg" alt=""> <img src="/static/img/banner4.jpg" alt="">
<div class="carousel-caption"> <div class="carousel-caption">
</div> </div>
</div> </div>
<div class="item"> <div class="item">
<img src="/static/img/banner5.jpg" alt=""> <img src="/static/img/banner5.jpg" alt="">
<div class="carousel-caption"> <div class="carousel-caption">
</div> </div>
</div> </div>
<div class="item"> <div class="item">
<img src="/static/img/banner6.jpg" alt=""> <img src="/static/img/banner6.jpg" alt="">
<div class="carousel-caption"> <div class="carousel-caption">
</div> </div>
</div> </div>
@ -64,6 +70,7 @@
<div class="col-xs-3 col-sm-3 col-md-3 col-lg-3"> <div class="col-xs-3 col-sm-3 col-md-3 col-lg-3">
<div class="thumbnail"> <div class="thumbnail">
<a href="#"><img src="/static/img/shop1.jpg" alt=""></a> <a href="#"><img src="/static/img/shop1.jpg" alt=""></a>
<div class="caption"> <div class="caption">
<div class="title"> <div class="title">
<a href="#"> <a href="#">
@ -77,7 +84,8 @@
<span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span> Товар есть в наличии <span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span> Товар есть в наличии
</div> </div>
<div class="in-cart"> <div class="in-cart">
<a class="cart-link" href="#"><span>Добавить в корзину <span class="glyphicon glyphicon-shopping-cart" aria-hidden="true"></span></span></a> <a class="cart-link" href="#"><span>Добавить в корзину <span
class="glyphicon glyphicon-shopping-cart" aria-hidden="true"></span></span></a>
</div> </div>
</div> </div>
</div> </div>
@ -85,6 +93,7 @@
<div class="col-xs-3 col-sm-3 col-md-3 col-lg-3"> <div class="col-xs-3 col-sm-3 col-md-3 col-lg-3">
<div class="thumbnail"> <div class="thumbnail">
<a href="#"><img src="/static/img/shop2.jpg" alt=""></a> <a href="#"><img src="/static/img/shop2.jpg" alt=""></a>
<div class="caption"> <div class="caption">
<div class="title"> <div class="title">
<a href="#"> <a href="#">
@ -98,7 +107,8 @@
<span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span> Товар есть в наличии <span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span> Товар есть в наличии
</div> </div>
<div class="in-cart"> <div class="in-cart">
<a class="cart-link" href="#"><span>Добавить в корзину <span class="glyphicon glyphicon-shopping-cart" aria-hidden="true"></span></span></a> <a class="cart-link" href="#"><span>Добавить в корзину <span
class="glyphicon glyphicon-shopping-cart" aria-hidden="true"></span></span></a>
</div> </div>
</div> </div>
</div> </div>
@ -106,6 +116,7 @@
<div class="col-xs-3 col-sm-3 col-md-3 col-lg-3"> <div class="col-xs-3 col-sm-3 col-md-3 col-lg-3">
<div class="thumbnail"> <div class="thumbnail">
<a href="#"><img src="/static/img/shop3.jpg" alt=""></a> <a href="#"><img src="/static/img/shop3.jpg" alt=""></a>
<div class="caption"> <div class="caption">
<div class="title"> <div class="title">
<a href="#"> <a href="#">
@ -119,7 +130,8 @@
<span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span> Товар есть в наличии <span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span> Товар есть в наличии
</div> </div>
<div class="in-cart"> <div class="in-cart">
<a class="cart-link" href="#"><span>Добавить в корзину <span class="glyphicon glyphicon-shopping-cart" aria-hidden="true"></span></span></a> <a class="cart-link" href="#"><span>Добавить в корзину <span
class="glyphicon glyphicon-shopping-cart" aria-hidden="true"></span></span></a>
</div> </div>
</div> </div>
</div> </div>
@ -127,6 +139,7 @@
<div class="col-xs-3 col-sm-3 col-md-3 col-lg-3"> <div class="col-xs-3 col-sm-3 col-md-3 col-lg-3">
<div class="thumbnail"> <div class="thumbnail">
<a href="#"><img src="/static/img/shop4.jpg" alt=""></a> <a href="#"><img src="/static/img/shop4.jpg" alt=""></a>
<div class="caption"> <div class="caption">
<div class="title"> <div class="title">
<a href="#"> <a href="#">
@ -140,7 +153,8 @@
<span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span> Товар есть в наличии <span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span> Товар есть в наличии
</div> </div>
<div class="in-cart"> <div class="in-cart">
<a class="cart-link" href="#"><span>Добавить в корзину <span class="glyphicon glyphicon-shopping-cart" aria-hidden="true"></span></span></a> <a class="cart-link" href="#"><span>Добавить в корзину <span
class="glyphicon glyphicon-shopping-cart" aria-hidden="true"></span></span></a>
</div> </div>
</div> </div>
</div> </div>
@ -150,6 +164,7 @@
<div class="col-xs-3 col-sm-3 col-md-3 col-lg-3"> <div class="col-xs-3 col-sm-3 col-md-3 col-lg-3">
<div class="thumbnail"> <div class="thumbnail">
<a href="#"><img src="/static/img/shop5.jpg" alt=""></a> <a href="#"><img src="/static/img/shop5.jpg" alt=""></a>
<div class="caption"> <div class="caption">
<div class="title"> <div class="title">
<a href="#"> <a href="#">
@ -163,7 +178,8 @@
<span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span> Товар есть в наличии <span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span> Товар есть в наличии
</div> </div>
<div class="in-cart"> <div class="in-cart">
<a class="cart-link" href="#"><span>Добавить в корзину <span class="glyphicon glyphicon-shopping-cart" aria-hidden="true"></span></span></a> <a class="cart-link" href="#"><span>Добавить в корзину <span
class="glyphicon glyphicon-shopping-cart" aria-hidden="true"></span></span></a>
</div> </div>
</div> </div>
</div> </div>
@ -171,6 +187,7 @@
<div class="col-xs-3 col-sm-3 col-md-3 col-lg-3"> <div class="col-xs-3 col-sm-3 col-md-3 col-lg-3">
<div class="thumbnail"> <div class="thumbnail">
<a href="#"><img src="/static/img/shop6.jpg" alt=""></a> <a href="#"><img src="/static/img/shop6.jpg" alt=""></a>
<div class="caption"> <div class="caption">
<div class="title"> <div class="title">
<a href="#"> <a href="#">
@ -184,7 +201,8 @@
<span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span> Товар есть в наличии <span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span> Товар есть в наличии
</div> </div>
<div class="in-cart"> <div class="in-cart">
<a class="cart-link" href="#"><span>Добавить в корзину <span class="glyphicon glyphicon-shopping-cart" aria-hidden="true"></span></span></a> <a class="cart-link" href="#"><span>Добавить в корзину <span
class="glyphicon glyphicon-shopping-cart" aria-hidden="true"></span></span></a>
</div> </div>
</div> </div>
</div> </div>
@ -192,6 +210,7 @@
<div class="col-xs-3 col-sm-3 col-md-3 col-lg-3"> <div class="col-xs-3 col-sm-3 col-md-3 col-lg-3">
<div class="thumbnail"> <div class="thumbnail">
<a href="#"><img src="/static/img/shop7.jpg" alt=""></a> <a href="#"><img src="/static/img/shop7.jpg" alt=""></a>
<div class="caption"> <div class="caption">
<div class="title"> <div class="title">
<a href="#"> <a href="#">
@ -205,7 +224,8 @@
<span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span> Товар есть в наличии <span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span> Товар есть в наличии
</div> </div>
<div class="in-cart"> <div class="in-cart">
<a class="cart-link" href="#"><span>Добавить в корзину <span class="glyphicon glyphicon-shopping-cart" aria-hidden="true"></span></span></a> <a class="cart-link" href="#"><span>Добавить в корзину <span
class="glyphicon glyphicon-shopping-cart" aria-hidden="true"></span></span></a>
</div> </div>
</div> </div>
</div> </div>
@ -213,6 +233,7 @@
<div class="col-xs-3 col-sm-3 col-md-3 col-lg-3"> <div class="col-xs-3 col-sm-3 col-md-3 col-lg-3">
<div class="thumbnail"> <div class="thumbnail">
<a href="#"><img src="/static/img/shop8.jpg" alt=""></a> <a href="#"><img src="/static/img/shop8.jpg" alt=""></a>
<div class="caption"> <div class="caption">
<div class="title"> <div class="title">
<a href="#"> <a href="#">
@ -226,7 +247,8 @@
<span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span> Товар есть в наличии <span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span> Товар есть в наличии
</div> </div>
<div class="in-cart"> <div class="in-cart">
<a class="cart-link" href="#"><span>Добавить в корзину <span class="glyphicon glyphicon-shopping-cart" aria-hidden="true"></span></span></a> <a class="cart-link" href="#"><span>Добавить в корзину <span
class="glyphicon glyphicon-shopping-cart" aria-hidden="true"></span></span></a>
</div> </div>
</div> </div>
</div> </div>

@ -16,7 +16,8 @@
{% for image in product.images.all() %} {% for image in product.images.all() %}
{% set im = image.image|thumbnail("80x80") %} {% set im = image.image|thumbnail("80x80") %}
{% set im_big = image.image|thumbnail("398x398") %} {% set im_big = image.image|thumbnail("398x398") %}
<a href="/static/{{ im_big.url }}" data-big-url="/static/{{ image.image.url }}"><img src="/static/{{ im.url }}" alt="" class="img-thumbnail"/></a> <a href="/static/{{ im_big.url }}" data-big-url="/static/{{ image.image.url }}"><img
src="/static/{{ im.url }}" alt="" class="img-thumbnail"/></a>
{% endfor %} {% endfor %}
</div> </div>
<div class="product-big-thumbnail col-xs-10"> <div class="product-big-thumbnail col-xs-10">
@ -30,8 +31,10 @@
</div> </div>
<div class="col-xs-6 product-short-description"> <div class="col-xs-6 product-short-description">
<h4>{{ product.title }}</h4> <br/> <h4>{{ product.title }}</h4> <br/>
<div class="product-detail-price"> <div class="product-detail-price">
<span class="product-detail-price-span">{{ product.min_price() }}</span> ₸</div> <span class="product-detail-price-span">{{ product.min_price() }}</span> ₸
</div>
<br/> <br/>
{% set variant = product.variations.filter(in_stock__gt=0).order_by('price').first() %} {% set variant = product.variations.filter(in_stock__gt=0).order_by('price').first() %}
{% if not variant %} {% if not variant %}
@ -42,14 +45,17 @@
{# TODO: Предусмотреть если всего один вариант#} {# TODO: Предусмотреть если всего один вариант#}
<select name="product-variations-selecter" class="product-variations-selecter"> <select name="product-variations-selecter" class="product-variations-selecter">
{% for variation in product.variations.order_by('price') %} {% for variation in product.variations.order_by('price') %}
<option {% if variation.pk == variant.pk %}selected='selected'{% endif %} value="{{ variation.pk }}" data-price="{{ variation.price }}" data-count="{{ variation.in_stock }}">{{ variation.variation }} - {{ variation.price }} ₸</option> <option {% if variation.pk == variant.pk %}selected='selected'{% endif %}
value="{{ variation.pk }}" data-price="{{ variation.price }}"
data-count="{{ variation.in_stock }}">{{ variation.variation }} - {{ variation.price }}
</option>
{% endfor %} {% endfor %}
</select> </select>
</div> </div>
<br/> <br/>
<div class="product-in-stock"> <div class="product-in-stock">
<select name="product-count-selecter" class="product-count-selecter"> <select name="product-count-selecter" class="product-count-selecter">
{% for count_val in range(variant.in_stock) %} {% for count_val in range(variant.in_stock) %}
@ -57,13 +63,16 @@
{% endfor %} {% endfor %}
</select> </select>
<br/><br/><br/> <br/><br/><br/>
<div class="row"> <div class="row">
<div class="itogo col-xs-6"> <div class="itogo col-xs-6">
Итого: <span class="itogo-span">{{ product.min_price() }}</span> ₸ Итого: <span class="itogo-span">{{ product.min_price() }}</span> ₸
</div> </div>
<div class="col-xs-6 text-right"> <div class="col-xs-6 text-right">
{# TODO: Сделать кнопку заказать#} {# TODO: Сделать кнопку заказать#}
<a href="/store/cart/add/?pk={{ variant.pk }}&count=1&next={{ product.get_absolute_url() }}" class="btn btn-warning btn-block" id="product-add-to-cart-link"><span class="glyphicon glyphicon-shopping-cart" aria-hidden="true"></span> Добавить в корзину</a> <a href="/store/cart/add/?pk={{ variant.pk }}&count=1&next={{ product.get_absolute_url() }}"
class="btn btn-warning btn-block" id="product-add-to-cart-link"><span
class="glyphicon glyphicon-shopping-cart" aria-hidden="true"></span> Добавить в корзину</a>
</div> </div>
</div> </div>

@ -1,6 +1,10 @@
from django.conf.urls import patterns, include, url from django.conf.urls import patterns, include, url
from django.contrib import admin from django.contrib import admin
admin.site.site_header = 'Админка Batiskaf.kz'
admin.site.site_title = 'Админка Batiskaf.kz'
admin.site.index_title = 'Модели'
urlpatterns = patterns( urlpatterns = patterns(
'', '',
url(r'^$', 'main.views.index', url(r'^$', 'main.views.index',

@ -9,7 +9,7 @@ https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/
import os import os
from django.core.wsgi import get_wsgi_application from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "batiskaf.settings")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "batiskaf.settings")
application = get_wsgi_application() application = get_wsgi_application()

@ -1,17 +1,13 @@
//@import "bootstrap.less"; //@import "bootstrap.less";
@import "../bower_components/bootstrap/less/variables.less"; @import "../bower_components/bootstrap/less/variables.less";
@import "../bower_components/bootstrap/less/mixins.less"; @import "../bower_components/bootstrap/less/mixins.less";
@import '../bower_components/colors/less/colors.less'; @import '../bower_components/colors/less/colors.less';
@import '../bower_components/yamm3/yamm/yamm.less'; @import '../bower_components/yamm3/yamm/yamm.less';
@brand-yellow: #fed000; @brand-yellow: #fed000;
@brand-gray: #434a54; @brand-gray: #434a54;
@brand-white: @white; @brand-white: @white;
/* Account for fixed navbar */ /* Account for fixed navbar */
body, body,
.navbar { .navbar {
@ -58,6 +54,7 @@ span.yellow{
} }
} }
} }
.header-middle { .header-middle {
background-color: @brand-yellow; background-color: @brand-yellow;
height: 130px; height: 130px;
@ -97,6 +94,7 @@ span.yellow{
} }
} }
} }
//.header-bottom{ //.header-bottom{
// #gradient > .vertical(@start-color: @brand-gray; @end-color: lighten(@brand-gray, 15%)); // #gradient > .vertical(@start-color: @brand-gray; @end-color: lighten(@brand-gray, 15%));
// height: 45px; // height: 45px;
@ -137,11 +135,11 @@ span.yellow{
.page-header { .page-header {
margin-bottom: 30px; margin-bottom: 30px;
} }
.page-header .lead { .page-header .lead {
margin-bottom: 10px; margin-bottom: 10px;
} }
/* Non-responsive overrides /* Non-responsive overrides
* *
* Utilize the following CSS to disable the responsive-ness of the container, * Utilize the following CSS to disable the responsive-ness of the container,
@ -187,6 +185,7 @@ span.yellow{
.navbar-toggle { .navbar-toggle {
display: none; display: none;
} }
.navbar-collapse { .navbar-collapse {
border-top: 0; border-top: 0;
} }
@ -200,9 +199,11 @@ span.yellow{
float: left; float: left;
margin: 0; margin: 0;
} }
.navbar-nav > li { .navbar-nav > li {
float: left; float: left;
} }
.navbar-nav > li > a { .navbar-nav > li > a {
padding: 15px; padding: 15px;
} }
@ -245,9 +246,11 @@ span.yellow{
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
box-shadow: 0 6px 12px rgba(0, 0, 0, .175); box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
} }
.navbar-default .navbar-nav .open .dropdown-menu > li > a { .navbar-default .navbar-nav .open .dropdown-menu > li > a {
color: #333; color: #333;
} }
ul.nav li.dropdown:hover > ul.dropdown-menu { ul.nav li.dropdown:hover > ul.dropdown-menu {
display: block; display: block;
color: #333; color: #333;
@ -282,6 +285,7 @@ ul.nav li.dropdown:hover > ul.dropdown-menu {
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
box-shadow: 0 6px 12px rgba(0, 0, 0, .175); box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
} }
.navbar .navbar-nav .open .dropdown-menu > li > a:hover, .navbar .navbar-nav .open .dropdown-menu > li > a:hover,
.navbar .navbar-nav .open .dropdown-menu > li > a:focus, .navbar .navbar-nav .open .dropdown-menu > li > a:focus,
.navbar .navbar-nav .open .dropdown-menu > .active > a, .navbar .navbar-nav .open .dropdown-menu > .active > a,
@ -290,6 +294,7 @@ ul.nav li.dropdown:hover > ul.dropdown-menu {
color: #fff !important; color: #fff !important;
background-color: #428bca !important; background-color: #428bca !important;
} }
.navbar .navbar-nav .open .dropdown-menu > .disabled > a, .navbar .navbar-nav .open .dropdown-menu > .disabled > a,
.navbar .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar .navbar-nav .open .dropdown-menu > .disabled > a:hover,
.navbar .navbar-nav .open .dropdown-menu > .disabled > a:focus { .navbar .navbar-nav .open .dropdown-menu > .disabled > a:focus {
@ -369,9 +374,11 @@ ul.nav li.dropdown:hover > ul.dropdown-menu {
.navbar-form .has-feedback .form-control-feedback { .navbar-form .has-feedback .form-control-feedback {
top: 0; top: 0;
} }
.navbar-container { .navbar-container {
padding: 0; padding: 0;
} }
.dropdown-menu { .dropdown-menu {
min-width: 720px !important; min-width: 720px !important;
} }
@ -379,12 +386,14 @@ ul.nav li.dropdown:hover > ul.dropdown-menu {
.navbar { .navbar {
margin-bottom: 0px !important; margin-bottom: 0px !important;
} }
.main-container { .main-container {
//border-right: 1px @silver solid; //border-right: 1px @silver solid;
//border-left: 1px @silver solid; //border-left: 1px @silver solid;
padding: 20px 0 100px 0; padding: 20px 0 100px 0;
} }
.index-goods { .index-goods {
.thumbnail { .thumbnail {
padding-bottom: 10px !important; padding-bottom: 10px !important;
@ -430,6 +439,7 @@ ul.nav li.dropdown:hover > ul.dropdown-menu {
} }
} }
} }
footer { footer {
.footer-col { .footer-col {
margin-top: 10px; margin-top: 10px;
@ -462,16 +472,19 @@ footer{
} }
} }
} }
/* Sticky footer styles /* Sticky footer styles
-------------------------------------------------- */ -------------------------------------------------- */
html { html {
position: relative !important; position: relative !important;
min-height: 100% !important; min-height: 100% !important;
} }
body { body {
/* Margin bottom by footer height */ /* Margin bottom by footer height */
margin-bottom: 410px !important; margin-bottom: 410px !important;
} }
.footer { .footer {
position: absolute !important; position: absolute !important;
bottom: 0 !important; bottom: 0 !important;
@ -505,15 +518,19 @@ body {
text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
} }
} }
body { body {
background-color: rgb(241, 242, 246); background-color: rgb(241, 242, 246);
} }
h1, h2, h3, h4, h5, h6 { h1, h2, h3, h4, h5, h6 {
text-align: center; text-align: center;
} }
.well-lg form { .well-lg form {
margin: 10px 0; margin: 10px 0;
} }
.alert h4 { .alert h4 {
text-align: left; text-align: left;
} }
@ -523,10 +540,12 @@ h1, h2, h3, h4, h5, h6{
width: 100%; width: 100%;
z-index: 5000; z-index: 5000;
} }
.navbar-container { .navbar-container {
width: 100%; width: 100%;
z-index: 5000; z-index: 5000;
} }
.panel-filter { .panel-filter {
ul { ul {
text-align: left; text-align: left;
@ -543,18 +562,21 @@ h1, h2, h3, h4, h5, h6{
} }
} }
} }
hr.dashed { hr.dashed {
border: none; border: none;
height: 1px; height: 1px;
width: 100%; width: 100%;
border-top: 1px dashed #ccc border-top: 1px dashed #ccc
} }
.category-filter-title { .category-filter-title {
text-transform: uppercase; text-transform: uppercase;
font-size: 12px; font-size: 12px;
font-weight: bold; font-weight: bold;
margin-bottom: 15px; margin-bottom: 15px;
} }
.category-paginator { .category-paginator {
font-size: 10px; font-size: 10px;
line-height: 20px; line-height: 20px;
@ -574,6 +596,7 @@ hr.dashed{
padding: 0 10px; padding: 0 10px;
} }
} }
.category-items { .category-items {
margin: 0; margin: 0;
} }
@ -586,34 +609,43 @@ hr.dashed{
border-left-color: @bradcrumbs-background; border-left-color: @bradcrumbs-background;
} }
.breadcrumb-arrow li a::after { .breadcrumb-arrow li a::after {
border-left: 11px solid @bradcrumbs-border; border-left: 11px solid @bradcrumbs-border;
} }
.breadcrumb-arrow li a::after { .breadcrumb-arrow li a::after {
border-left: 11px solid @bradcrumbs-border; border-left: 11px solid @bradcrumbs-border;
} }
.breadcrumb-arrow li a { .breadcrumb-arrow li a {
background-color: @bradcrumbs-background; background-color: @bradcrumbs-background;
border: 1px solid @bradcrumbs-border; border: 1px solid @bradcrumbs-border;
color: @bradcrumbs-color; color: @bradcrumbs-color;
} }
.breadcrumb-arrow li a:focus::before, .breadcrumb-arrow li a:hover::before { .breadcrumb-arrow li a:focus::before, .breadcrumb-arrow li a:hover::before {
border-left-color: @bradcrumbs-background; border-left-color: @bradcrumbs-background;
} }
.breadcrumb-arrow li a:focus, .breadcrumb-arrow li a:hover { .breadcrumb-arrow li a:focus, .breadcrumb-arrow li a:hover {
background-color: @bradcrumbs-background; background-color: @bradcrumbs-background;
border: 1px solid @bradcrumbs-background; border: 1px solid @bradcrumbs-background;
} }
.breadcrumb-arrow li a:active::after, .breadcrumb-arrow li a:active::before { .breadcrumb-arrow li a:active::after, .breadcrumb-arrow li a:active::before {
border-left-color: @bradcrumbs-background; border-left-color: @bradcrumbs-background;
} }
.breadcrumb-arrow li a:active::after, .breadcrumb-arrow li a:active::before { .breadcrumb-arrow li a:active::after, .breadcrumb-arrow li a:active::before {
border-left-color: @bradcrumbs-background; border-left-color: @bradcrumbs-background;
} }
.breadcrumb-arrow li a:active { .breadcrumb-arrow li a:active {
background-color: @bradcrumbs-background; background-color: @bradcrumbs-background;
border: 1px solid @bradcrumbs-background; border: 1px solid @bradcrumbs-background;
} }
.category-paginator { .category-paginator {
a { a {
color: @brand-yellow; color: @brand-yellow;
@ -622,12 +654,14 @@ hr.dashed{
} }
} }
} }
.product-min-thumbnails { .product-min-thumbnails {
img { img {
margin-bottom: 10px; margin-bottom: 10px;
} }
} }
.product-big-thumbnail { .product-big-thumbnail {
.product-big-thumbnail-container { .product-big-thumbnail-container {
width: 400px; width: 400px;
@ -647,6 +681,7 @@ hr.dashed{
} }
} }
} }
.product-short-description { .product-short-description {
padding-left: 35px; padding-left: 35px;
h4 { h4 {
@ -660,16 +695,19 @@ hr.dashed{
} }
} }
.product-not-in-stock { .product-not-in-stock {
color: @red; color: @red;
font-style: italic; font-style: italic;
display: none; display: none;
} }
.product-in-stock { .product-in-stock {
.itogo { .itogo {
font-size: 20px; font-size: 20px;
} }
} }
table.table-cart { table.table-cart {
input { input {
width: 70px; width: 70px;
@ -677,6 +715,7 @@ table.table-cart{
float: right; float: right;
} }
} }
.table { .table {
thead { thead {
tr { tr {
@ -716,6 +755,7 @@ table.table-cart{
} }
} }
ul.messages { ul.messages {
display: none; display: none;
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

@ -16,6 +16,7 @@ class BrandAdmin(admin.ModelAdmin):
list_display = ('title',) list_display = ('title',)
prepopulated_fields = {"slug": ("title",)} prepopulated_fields = {"slug": ("title",)}
# @admin.register(Image) # @admin.register(Image)
# class ImageAdmin(admin.ModelAdmin): # class ImageAdmin(admin.ModelAdmin):
# list_display = ('image',) # list_display = ('image',)
@ -35,10 +36,10 @@ class AttributeAdmin(admin.ModelAdmin):
class ImageInProductInline(admin.TabularInline): class ImageInProductInline(admin.TabularInline):
def render_image(self, obj): def render_image(self, obj):
return mark_safe("""<img src="/static/{0}" width='200' />""".format( return mark_safe("""<img src="/static/{0}" width='200' />""".format(
obj.image.url)) obj.image.url))
render_image.short_description = 'Превью' render_image.short_description = 'Превью'
model = ImageInProduct model = ImageInProduct
@ -60,7 +61,6 @@ class ProductAdmin(admin.ModelAdmin):
inlines = [ImageInProductInline, inlines = [ImageInProductInline,
ProductVariationInline, AttributesInProductInline] ProductVariationInline, AttributesInProductInline]
# #
# @admin.register(Category) # @admin.register(Category)
# class CategoryAdmin(admin.ModelAdmin): # class CategoryAdmin(admin.ModelAdmin):

@ -0,0 +1,51 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('store', '0009_auto_20150526_1021'),
]
operations = [
migrations.AlterModelOptions(
name='attribute',
options={'verbose_name_plural': 'атрибуты', 'verbose_name': 'атрибут'},
),
migrations.AlterModelOptions(
name='attributeforcategory',
options={'verbose_name_plural': 'атрибуты в категориях', 'verbose_name': 'атрибут в категории'},
),
migrations.AlterModelOptions(
name='attributesinproduct',
options={'verbose_name_plural': 'атрибуты в товарах', 'verbose_name': 'атрибут в товаре'},
),
migrations.AlterModelOptions(
name='brand',
options={'verbose_name_plural': 'бренды', 'verbose_name': 'бренд'},
),
migrations.AlterModelOptions(
name='category',
options={'verbose_name_plural': 'категории', 'verbose_name': 'категория'},
),
migrations.AlterModelOptions(
name='imageinproduct',
options={'verbose_name_plural': 'фото товаров', 'verbose_name': 'фото товара'},
),
migrations.AlterModelOptions(
name='product',
options={'verbose_name_plural': 'товары', 'verbose_name': 'товар'},
),
migrations.AlterModelOptions(
name='productvariation',
options={'verbose_name_plural': 'разновидности товаров', 'verbose_name': 'разновидность товара'},
),
migrations.AddField(
model_name='productvariation',
name='article',
field=models.CharField(max_length=32, blank=True, null=True, verbose_name='Артикул', default=''),
),
]

@ -26,6 +26,10 @@ class Category(models.Model):
attributes = models.ManyToManyField( attributes = models.ManyToManyField(
'Attribute', through='AttributeForCategory') 'Attribute', through='AttributeForCategory')
class Meta:
verbose_name = 'категория'
verbose_name_plural = 'категории'
def __str__(self): def __str__(self):
titles = [] titles = []
for p in self.get_parents(): for p in self.get_parents():
@ -72,6 +76,10 @@ class Attribute(models.Model):
title = models.CharField('Наименование', max_length=256, default='') title = models.CharField('Наименование', max_length=256, default='')
slug = models.SlugField('Ссылка', max_length=256, default='') slug = models.SlugField('Ссылка', max_length=256, default='')
class Meta:
verbose_name = 'атрибут'
verbose_name_plural = 'атрибуты'
def __str__(self): def __str__(self):
return self.title return self.title
@ -89,6 +97,10 @@ class AttributeForCategory(models.Model):
models.CharField(max_length=50), blank=True, default=[]) models.CharField(max_length=50), blank=True, default=[])
priority = models.IntegerField('Приоритет', default=0) priority = models.IntegerField('Приоритет', default=0)
class Meta:
verbose_name = 'атрибут в категории'
verbose_name_plural = 'атрибуты в категориях'
def __str__(self): def __str__(self):
if self.field_type == FIELD_TYPE_SELECT: if self.field_type == FIELD_TYPE_SELECT:
return '{}: {} ({}: {})'.format( return '{}: {} ({}: {})'.format(
@ -119,9 +131,14 @@ class Brand(models.Model):
title = models.CharField('Наименование', max_length=256, default='') title = models.CharField('Наименование', max_length=256, default='')
slug = models.SlugField('Ссылка', max_length=256, default='') slug = models.SlugField('Ссылка', max_length=256, default='')
class Meta:
verbose_name = 'бренд'
verbose_name_plural = 'бренды'
def __str__(self): def __str__(self):
return self.title return self.title
# class Image(models.Model): # class Image(models.Model):
# image = models.ImageField('Картинка', # image = models.ImageField('Картинка',
# upload_to=os.path.join(settings.BASE_DIR, "static", 'uploads')) # upload_to=os.path.join(settings.BASE_DIR, "static", 'uploads'))
@ -138,6 +155,10 @@ class Product(models.Model):
attirbutes = models.ManyToManyField( attirbutes = models.ManyToManyField(
AttributeForCategory, through='AttributesInProduct') AttributeForCategory, through='AttributesInProduct')
class Meta:
verbose_name = 'товар'
verbose_name_plural = 'товары'
def __str__(self): def __str__(self):
return self.title return self.title
@ -174,6 +195,12 @@ class ProductVariation(models.Model):
'Цена (тенге)', default=0, null=False, blank=False) 'Цена (тенге)', default=0, null=False, blank=False)
in_stock = models.IntegerField( in_stock = models.IntegerField(
'В наличии (шт.)', default=1, null=False, blank=False) 'В наличии (шт.)', default=1, null=False, blank=False)
article = models.CharField(
'Артикул', max_length=32, null=True, blank=True, default='')
class Meta:
verbose_name = 'разновидность товара'
verbose_name_plural = 'разновидности товаров'
def __str__(self): def __str__(self):
return self.variation return self.variation
@ -188,9 +215,14 @@ class AttributesInProduct(models.Model):
value = models.CharField( value = models.CharField(
'Значение', max_length=64, default=None, blank=True, null=True) 'Значение', max_length=64, default=None, blank=True, null=True)
class Meta:
verbose_name = 'атрибут в товаре'
verbose_name_plural = 'атрибуты в товарах'
def photo_filename(instance, filename): def photo_filename(instance, filename):
from slugify import slugify_filename from slugify import slugify_filename
return 'photo_uploads/' + slugify_filename(filename) return 'photo_uploads/' + slugify_filename(filename)
@ -203,3 +235,7 @@ class ImageInProduct(models.Model):
product = models.ForeignKey( product = models.ForeignKey(
Product, verbose_name='Товар', related_name='images') Product, verbose_name='Товар', related_name='images')
is_main = models.BooleanField('Главная', default=False) is_main = models.BooleanField('Главная', default=False)
class Meta:
verbose_name = 'фото товара'
verbose_name_plural = 'фото товаров'

@ -2,7 +2,6 @@ from django.conf.urls import patterns, url
from django.views.generic import RedirectView from django.views.generic import RedirectView
from .views import * from .views import *
urlpatterns = patterns('', urlpatterns = patterns('',
url(r'^$', RedirectView.as_view( url(r'^$', RedirectView.as_view(
url='/', permanent=True), name='store_index'), url='/', permanent=True), name='store_index'),

@ -125,7 +125,6 @@ class ProductView(CategoryBaseView, DetailView):
class CartAddView(RedirectView): class CartAddView(RedirectView):
def dispatch(self, request, *args, **kwargs): def dispatch(self, request, *args, **kwargs):
retval = super(CartAddView, self).dispatch(request, args, kwargs) retval = super(CartAddView, self).dispatch(request, args, kwargs)
cart = Cart(self.request) cart = Cart(self.request)
@ -145,7 +144,6 @@ class CartAddView(RedirectView):
class CartRemoveView(RedirectView): class CartRemoveView(RedirectView):
def dispatch(self, request, *args, **kwargs): def dispatch(self, request, *args, **kwargs):
retval = super(CartRemoveView, self).dispatch(request, args, kwargs) retval = super(CartRemoveView, self).dispatch(request, args, kwargs)
cart = Cart(self.request) cart = Cart(self.request)

Loading…
Cancel
Save