diff --git a/cart/migrations/0002_auto_20181027_1653.py b/cart/migrations/0002_auto_20181027_1653.py new file mode 100644 index 0000000..f281d59 --- /dev/null +++ b/cart/migrations/0002_auto_20181027_1653.py @@ -0,0 +1,25 @@ +# Generated by Django 2.0.7 on 2018-10-27 16:53 + +import datetime +from django.db import migrations, models +from django.utils.timezone import utc + + +class Migration(migrations.Migration): + + dependencies = [ + ('cart', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='discount', + name='code', + field=models.CharField(blank=True, default='866872fd-bf5a-48bc-8e22-c3581eb7a307', max_length=50, unique=True, verbose_name='Код'), + ), + migrations.AlterField( + model_name='discount', + name='valid_to', + field=models.DateTimeField(blank=True, default=datetime.datetime(2018, 11, 3, 16, 53, 38, 906817, tzinfo=utc), verbose_name='Конец'), + ), + ] diff --git a/core/models.py b/core/models.py index a5e73f6..5b377ff 100644 --- a/core/models.py +++ b/core/models.py @@ -154,7 +154,7 @@ class Certificate(AbstractStatusModel): }) name = models.CharField(_('Название'), max_length=255) - image = models.FileField(_('Изображение'), upload_to=upload_file_to, blank=True,null=True) + image = models.FileField(_('Изображение'), upload_to=upload_file_to, blank=True, null=True) preview = models.FileField(_('Миниатюрка'), upload_to=upload_file_to) class Meta: diff --git a/products/migrations/0002_auto_20181027_1653.py b/products/migrations/0002_auto_20181027_1653.py new file mode 100644 index 0000000..1b2caf2 --- /dev/null +++ b/products/migrations/0002_auto_20181027_1653.py @@ -0,0 +1,25 @@ +# Generated by Django 2.0.7 on 2018-10-27 16:53 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('products', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='manufacturer', + name='image', + field=models.ImageField(default=1, upload_to='producers', verbose_name='изображение'), + preserve_default=False, + ), + migrations.AlterField( + model_name='manufacturer', + name='name', + field=models.CharField(default=1, max_length=256, verbose_name='название'), + preserve_default=False, + ), + ] diff --git a/products/models.py b/products/models.py index 25413f6..ce219a4 100644 --- a/products/models.py +++ b/products/models.py @@ -69,12 +69,10 @@ STATUS_CHOICES = ( # verbose_name_plural = _('Аттрибуты продукта') -# @TODO: tranlsate into english and use traslation - class Manufacturer(AbstractStatusModel): - name = models.CharField(_('название'), max_length=64, blank=True, null=True, default=None) + name = models.CharField(_('название'), max_length=256, blank=False, null=False) slug = AutoSlugField(verbose_name=_('код'), unique=True, populate_from='name') - image = models.ImageField(_('изображение'), upload_to='producers', blank=True, null=True) + image = models.ImageField(_('изображение'), upload_to='producers', blank=False, null=False) status = models.SmallIntegerField(_('статус'), default=STATUS_DEFAULT, choices=STATUS_CHOICES) def __str__(self): @@ -93,12 +91,11 @@ class ProductCategory(AbstractStatusMPTTModel): 'filename': filename }) - name = models.CharField(_('название'), db_index=True, unique=True, max_length=64, blank=True, null=True, - default=None) + name = models.CharField(_('название'), db_index=True, unique=True, max_length=64) slug = AutoSlugField(_('код'), populate_from='name') parent = TreeForeignKey('self', verbose_name=_('родительская категория'), on_delete=models.CASCADE, null=True, blank=True, related_name='children') - image = models.FileField(_("иконка"), upload_to=get_file_path, blank=True) + image = models.FileField(_("иконка"), upload_to=get_file_path, blank=False, null=False) status = models.SmallIntegerField(_('статус'), default=STATUS_DEFAULT, choices=STATUS_CHOICES) def __str__(self): @@ -115,10 +112,9 @@ class ProductCategory(AbstractStatusMPTTModel): class MPTTMeta: order_insertion_by = ('name',) - # @TODO: tranlsate into english and use traslation class Meta: - unique_together = ('slug', 'parent') - ordering = ('tree_id', 'level') + unique_together = (_('slug'), _('parent')) + ordering = (_('tree_id'), _('level')) verbose_name = _("Категория") verbose_name_plural = _("Категории") @@ -158,7 +154,6 @@ class Product(AbstractStatusMPTTModel): verbose_name_plural = _('Продукты') -# @TODO: tranlsate into english and use traslation class ProductRate(AbstractDateTimeModel): user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE) product = models.ForeignKey(Product, on_delete=models.CASCADE) @@ -169,21 +164,6 @@ class ProductRate(AbstractDateTimeModel): verbose_name_plural = _('Рейтинг продукта') -# -# # @TODO: translate into english and use traslation -# class ProductAttributeValue(AbstractDateTimeModel): -# attribute = models.ForeignKey(ProductAttribute, on_delete=models.CASCADE, related_name='value') -# value = HStoreField(_('значение'),default="") -# -# def __str__(self): -# return self.value.serialize -# -# class Meta: -# unique_together = ('attribute', 'value') -# verbose_name = _('Значение аттрибута') -# verbose_name_plural = _('Значение аттрибутов') - - # ----------------- PRODUCT IMAGE STATUS LIST ------------------ class ProductImageManager(models.Manager): diff --git a/products/tests.py b/products/tests.py index 7ce503c..0045d22 100644 --- a/products/tests.py +++ b/products/tests.py @@ -1,3 +1,25 @@ from django.test import TestCase +from .models import Manufacturer, STATUS_DEFAULT -# Create your tests here. + +class ManufactureTestCase(TestCase): + @classmethod + def setUpTestData(cls): + cls.mock_path_to_image = 'path/to/image/file.png' + Manufacturer.objects.create(name='TestManufacture', image=cls.mock_path_to_image, status=STATUS_DEFAULT) + + def test_default_status(self): + manufacture_obj = Manufacturer.objects.get(name='TestManufacture') + self.assertEqual(manufacture_obj.status, STATUS_DEFAULT) + + def test_path_to_image(self): + manufacture_obj = Manufacturer.objects.get(name='TestManufacture') + self.assertEqual(manufacture_obj.image, self.mock_path_to_image) + + +class ProductCategoryTestCase(TestCase): + pass + + +class ProductTestCase(TestCase): + pass diff --git a/products/urls.py b/products/urls.py index 02aa388..23d8a66 100644 --- a/products/urls.py +++ b/products/urls.py @@ -1,11 +1,11 @@ import mptt_urls -from django.urls import re_path +from django.urls import re_path, path from . import views from .models import ProductCategory, Product urlpatterns = [ - re_path(r'^list/$', views.ProductListView.as_view(), name='product_list'), + path('list/', views.ProductListView.as_view(), name='product_list'), re_path(r'^list/(?P.*)', mptt_urls.view(model=ProductCategory, view=views.ProductListView.as_view(), slug_field='slug'), name='product_list'