From 262e98b9e13627e9a1d353dcd3f642f34cc512a2 Mon Sep 17 00:00:00 2001 From: Dmitriy Kuzmenko Date: Wed, 28 Aug 2019 10:15:17 +0300 Subject: [PATCH] add awards --- apps/establishment/admin.py | 16 ++++- apps/establishment/models.py | 2 + apps/main/admin.py | 12 ++++ apps/main/migrations/0007_award_awardtype.py | 35 +++++++++++ .../migrations/0008_merge_20190827_1433.py | 14 +++++ .../migrations/0009_remove_award_title.py | 17 +++++ apps/main/migrations/0010_award_title.py | 19 ++++++ apps/main/models.py | 29 ++++++++- apps/main/serializers.py | 12 ++++ apps/main/urls.py | 2 + apps/main/views.py | 14 +++++ apps/news/models.py | 6 ++ apps/products/__init__.py | 0 apps/products/admin.py | 3 + apps/products/apps.py | 8 +++ apps/products/migrations/__init__.py | 0 apps/products/models.py | 63 +++++++++++++++++++ apps/products/serializers/__init__.py | 0 apps/products/serializers/common.py | 1 + apps/products/serializers/mobile.py | 0 apps/products/serializers/web.py | 0 apps/products/tests.py | 3 + apps/products/urls/__init__.py | 0 apps/products/urls/common.py | 0 apps/products/urls/mobile.py | 0 apps/products/urls/web.py | 0 apps/products/views/__init__.py | 0 apps/products/views/common.py | 0 apps/products/views/mobile.py | 0 apps/products/views/views.py | 1 + apps/products/views/web.py | 0 31 files changed, 255 insertions(+), 2 deletions(-) create mode 100644 apps/main/migrations/0007_award_awardtype.py create mode 100644 apps/main/migrations/0008_merge_20190827_1433.py create mode 100644 apps/main/migrations/0009_remove_award_title.py create mode 100644 apps/main/migrations/0010_award_title.py create mode 100644 apps/products/__init__.py create mode 100644 apps/products/admin.py create mode 100644 apps/products/apps.py create mode 100644 apps/products/migrations/__init__.py create mode 100644 apps/products/models.py create mode 100644 apps/products/serializers/__init__.py create mode 100644 apps/products/serializers/common.py create mode 100644 apps/products/serializers/mobile.py create mode 100644 apps/products/serializers/web.py create mode 100644 apps/products/tests.py create mode 100644 apps/products/urls/__init__.py create mode 100644 apps/products/urls/common.py create mode 100644 apps/products/urls/mobile.py create mode 100644 apps/products/urls/web.py create mode 100644 apps/products/views/__init__.py create mode 100644 apps/products/views/common.py create mode 100644 apps/products/views/mobile.py create mode 100644 apps/products/views/views.py create mode 100644 apps/products/views/web.py diff --git a/apps/establishment/admin.py b/apps/establishment/admin.py index 0562fb8e..297386c8 100644 --- a/apps/establishment/admin.py +++ b/apps/establishment/admin.py @@ -1,4 +1,18 @@ """Establishment admin conf.""" from django.contrib import admin +from establishment import models -# Register your models here. + +@admin.register(models.EstablishmentType) +class EstablishmentTypeAdmin(admin.ModelAdmin): + """EstablishmentType admin.""" + + +@admin.register(models.EstablishmentSubType) +class EstablishmentSubTypeAdmin(admin.ModelAdmin): + """EstablishmentSubType admin.""" + + +@admin.register(models.Establishment) +class EstablishmentAdmin(admin.ModelAdmin): + """Establishment admin.""" diff --git a/apps/establishment/models.py b/apps/establishment/models.py index 67a6b6ce..26a3a87d 100644 --- a/apps/establishment/models.py +++ b/apps/establishment/models.py @@ -5,6 +5,7 @@ from django.db import models from django.utils.translation import gettext_lazy as _ from location.models import Address from utils.models import ProjectBaseMixin, ImageMixin, LocaleManagerMixin +from django.contrib.contenttypes import fields as generic # todo: establishment type&subtypes check @@ -91,6 +92,7 @@ class Establishment(ProjectBaseMixin, ImageMixin): price_level = models.PositiveIntegerField(blank=True, null=True, default=None, verbose_name=_('Price level')) + awards = generic.GenericRelation(to='main.Award') objects = EstablishmentManager() diff --git a/apps/main/admin.py b/apps/main/admin.py index ab34c8dc..1666511d 100644 --- a/apps/main/admin.py +++ b/apps/main/admin.py @@ -11,3 +11,15 @@ class SiteSettingsAdmin(admin.ModelAdmin): @admin.register(models.Feature) class FeatureAdmin(admin.ModelAdmin): """Feature admin conf.""" + + +@admin.register(models.AwardType) +class AwardTypeAdmin(admin.ModelAdmin): + """Award type admin conf.""" + + +@admin.register(models.Award) +class AwardAdmin(admin.ModelAdmin): + """Award admin conf.""" + # list_display = ['id', '__str__'] + # list_display_links = ['id', '__str__'] diff --git a/apps/main/migrations/0007_award_awardtype.py b/apps/main/migrations/0007_award_awardtype.py new file mode 100644 index 00000000..130549f2 --- /dev/null +++ b/apps/main/migrations/0007_award_awardtype.py @@ -0,0 +1,35 @@ +# Generated by Django 2.2.4 on 2019-08-27 13:46 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('location', '0005_auto_20190822_1144'), + ('contenttypes', '0002_remove_content_type_name'), + ('main', '0006_auto_20190822_1118'), + ] + + operations = [ + migrations.CreateModel( + name='AwardType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255, verbose_name='name')), + ('country', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='location.Country', verbose_name='country')), + ], + ), + migrations.CreateModel( + name='Award', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(default='', max_length=255, verbose_name='title')), + ('vintage_year', models.CharField(default='', max_length=255, verbose_name='vintage year')), + ('object_id', models.PositiveIntegerField()), + ('award_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='main.AwardType')), + ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), + ], + ), + ] diff --git a/apps/main/migrations/0008_merge_20190827_1433.py b/apps/main/migrations/0008_merge_20190827_1433.py new file mode 100644 index 00000000..aea59504 --- /dev/null +++ b/apps/main/migrations/0008_merge_20190827_1433.py @@ -0,0 +1,14 @@ +# Generated by Django 2.2.4 on 2019-08-27 14:33 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0007_award_awardtype'), + ('main', '0007_sitefeature_main'), + ] + + operations = [ + ] diff --git a/apps/main/migrations/0009_remove_award_title.py b/apps/main/migrations/0009_remove_award_title.py new file mode 100644 index 00000000..b0c50bc9 --- /dev/null +++ b/apps/main/migrations/0009_remove_award_title.py @@ -0,0 +1,17 @@ +# Generated by Django 2.2.4 on 2019-08-28 07:03 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0008_merge_20190827_1433'), + ] + + operations = [ + migrations.RemoveField( + model_name='award', + name='title', + ), + ] diff --git a/apps/main/migrations/0010_award_title.py b/apps/main/migrations/0010_award_title.py new file mode 100644 index 00000000..d09784a9 --- /dev/null +++ b/apps/main/migrations/0010_award_title.py @@ -0,0 +1,19 @@ +# Generated by Django 2.2.4 on 2019-08-28 07:05 + +import django.contrib.postgres.fields.jsonb +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0009_remove_award_title'), + ] + + operations = [ + migrations.AddField( + model_name='award', + name='title', + field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default=None, help_text='{"en":"some text"}', null=True, verbose_name='title'), + ), + ] diff --git a/apps/main/models.py b/apps/main/models.py index 5b41d75b..47e41397 100644 --- a/apps/main/models.py +++ b/apps/main/models.py @@ -1,9 +1,10 @@ """Main app models.""" from django.conf import settings +from django.contrib.contenttypes import fields as generic from django.contrib.postgres.fields import JSONField from django.db import models from django.utils.translation import gettext_lazy as _ - +from django.contrib.contenttypes.models import ContentType from location.models import Country from main import methods from utils.models import ProjectBaseMixin @@ -182,3 +183,29 @@ class SiteFeature(ProjectBaseMixin): verbose_name = _('Site feature') verbose_name_plural = _('Site features') unique_together = ('site_settings', 'feature') + + +class Award(models.Model): + """Award model.""" + award_type = models.ForeignKey('main.AwardType', on_delete=models.CASCADE) + title = JSONField( + _('title'), null=True, blank=True, + default=None, help_text='{"en":"some text"}') + vintage_year = models.CharField(_('vintage year'), max_length=255, default='') + + content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) + object_id = models.PositiveIntegerField() + content_object = generic.GenericForeignKey('content_type', 'object_id') + + def __str__(self): + title = 'None' + if self.title and 'en' in self.title: + title = self.title['en'] + return f'id:{self.id}-{title}' + + +class AwardType(models.Model): + """AwardType model.""" + country = models.ForeignKey( + 'location.Country', verbose_name=_('country'), on_delete=models.CASCADE) + name = models.CharField(_('name'), max_length=255) diff --git a/apps/main/serializers.py b/apps/main/serializers.py index 372e1b68..73ec941b 100644 --- a/apps/main/serializers.py +++ b/apps/main/serializers.py @@ -68,3 +68,15 @@ class SiteSettingsSerializer(serializers.ModelSerializer): # 'site_settings', # 'feature', # ) + + +class AwardSerializer(serializers.ModelSerializer): + """Award serializer.""" + + class Meta: + model = models.Award + fields = [ + # 'title', + 'award_type', + 'vintage_year', + ] \ No newline at end of file diff --git a/apps/main/urls.py b/apps/main/urls.py index 10379c3a..d9c441b6 100644 --- a/apps/main/urls.py +++ b/apps/main/urls.py @@ -17,4 +17,6 @@ urlpatterns = [ # name='site-features-lc'), # path('site-features//', views.SiteFeaturesRUDView.as_view(), # name='site-features-rud'), + path('awards/', views.AwardView.as_view(), name='awards_list', ), + path('awards//', views.AwardRetrieveView.as_view(), name='awards_retrieve', ), ] \ No newline at end of file diff --git a/apps/main/views.py b/apps/main/views.py index 4e32aadc..e91a7148 100644 --- a/apps/main/views.py +++ b/apps/main/views.py @@ -60,3 +60,17 @@ class SiteSettingsView(generics.RetrieveAPIView): # class SiteFeaturesRUDView(SiteFeaturesViewMixin, # generics.RetrieveUpdateDestroyAPIView): # """Site features RUD.""" + + +class AwardView(generics.ListAPIView): + """Awards list view.""" + serializer_class = serializers.AwardSerializer + queryset = models.Award.objects.all() + permission_classes = (permissions.AllowAny, ) + + +class AwardRetrieveView(generics.RetrieveUpdateDestroyAPIView): + """Award retrieve view.""" + serializer_class = serializers.AwardSerializer + queryset = models.Award.objects.all() + permission_classes = (permissions.IsAuthenticatedOrReadOnly,) diff --git a/apps/news/models.py b/apps/news/models.py index 28983fdf..9228f86f 100644 --- a/apps/news/models.py +++ b/apps/news/models.py @@ -1,6 +1,7 @@ from django.contrib.postgres.fields import JSONField from django.db import models from django.utils.translation import gettext_lazy as _ +from django.utils.translation import get_language from utils.models import (ProjectBaseMixin, BaseAttributes, LocaleManagerMixin, ImageMixin) @@ -80,3 +81,8 @@ class News(BaseAttributes): def __str__(self): return f'news: {self.id}' + + @property + def test_trans(self): + language = get_language() + return self.title.get(language) diff --git a/apps/products/__init__.py b/apps/products/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/apps/products/admin.py b/apps/products/admin.py new file mode 100644 index 00000000..8c38f3f3 --- /dev/null +++ b/apps/products/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/apps/products/apps.py b/apps/products/apps.py new file mode 100644 index 00000000..17d75292 --- /dev/null +++ b/apps/products/apps.py @@ -0,0 +1,8 @@ +from django.apps import AppConfig +from django.utils.translation import gettext_lazy as _ + + +class ProductsConfig(AppConfig): + """Products model.""" + name = 'products' + verbose_name = _('products') diff --git a/apps/products/migrations/__init__.py b/apps/products/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/apps/products/models.py b/apps/products/models.py new file mode 100644 index 00000000..3c0e6ee8 --- /dev/null +++ b/apps/products/models.py @@ -0,0 +1,63 @@ +# from django.contrib.postgres.fields import JSONField +# from django.db import models +# from django.utils.translation import gettext_lazy as _ +# +# from utils.models import BaseAttributes +# +# +# class ProductManager(models.Manager): +# """Product manager.""" +# +# +# class ProductQuerySet(models.QuerySet): +# """Product queryset.""" +# +# +# class Product(BaseAttributes): +# """Product models.""" +# name = models.CharField(_('name'), max_length=255) +# country = models.ForeignKey('location.Country', on_delete=models.CASCADE) +# region = models.ForeignKey('location.Region', on_delete=models.CASCADE) +# # ASK: What is the "subregion" +# +# description = JSONField(_('description')) +# characteristics = JSONField(_('characteristics')) +# metadata_values = JSONField(_('metadata_values')) +# # common_relations_id +# # product_region_id +# code = models.CharField(_('code'), max_length=255) +# available = models.BooleanField(_('available')) +# +# # dealer_type +# # target_scope +# # target_type +# # rank +# # excluding_tax_unit_price +# # column_21 +# # currencies_id +# # vintage +# # producer_price +# # producer_description +# # annual_produced_quantity +# # production_method_description +# # unit_name +# # unit +# # unit_values +# # organic_source +# # certificates +# # establishments_id +# # restrictions +# # +# objects = ProductManager.from_queryset(ProductQuerySet)() +# +# class Meta: +# verbose_name = _('product') +# verbose_name_plural = _('products') +# +# +# class ProductType(models.Model): +# """ProductType model.""" +# +# class Meta: +# verbose_name_plural = _('product types') +# verbose_name = _('product type') diff --git a/apps/products/serializers/__init__.py b/apps/products/serializers/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/apps/products/serializers/common.py b/apps/products/serializers/common.py new file mode 100644 index 00000000..236cd38b --- /dev/null +++ b/apps/products/serializers/common.py @@ -0,0 +1 @@ +from rest_framework import serializers diff --git a/apps/products/serializers/mobile.py b/apps/products/serializers/mobile.py new file mode 100644 index 00000000..e69de29b diff --git a/apps/products/serializers/web.py b/apps/products/serializers/web.py new file mode 100644 index 00000000..e69de29b diff --git a/apps/products/tests.py b/apps/products/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/apps/products/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/apps/products/urls/__init__.py b/apps/products/urls/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/apps/products/urls/common.py b/apps/products/urls/common.py new file mode 100644 index 00000000..e69de29b diff --git a/apps/products/urls/mobile.py b/apps/products/urls/mobile.py new file mode 100644 index 00000000..e69de29b diff --git a/apps/products/urls/web.py b/apps/products/urls/web.py new file mode 100644 index 00000000..e69de29b diff --git a/apps/products/views/__init__.py b/apps/products/views/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/apps/products/views/common.py b/apps/products/views/common.py new file mode 100644 index 00000000..e69de29b diff --git a/apps/products/views/mobile.py b/apps/products/views/mobile.py new file mode 100644 index 00000000..e69de29b diff --git a/apps/products/views/views.py b/apps/products/views/views.py new file mode 100644 index 00000000..60f00ef0 --- /dev/null +++ b/apps/products/views/views.py @@ -0,0 +1 @@ +# Create your views here. diff --git a/apps/products/views/web.py b/apps/products/views/web.py new file mode 100644 index 00000000..e69de29b