From 1ce71fdcdcd2821d8f48fa4de995234e46b3c412 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Mon, 23 Sep 2019 16:37:33 +0300 Subject: [PATCH 1/8] slugs for news & establishments --- .../migrations/0012_collection_slug.py | 34 +++++++++++++++++++ apps/collection/models.py | 4 +++ .../migrations/0029_establishment_slug.py | 33 ++++++++++++++++++ apps/establishment/models.py | 11 +++--- apps/establishment/serializers/back.py | 2 ++ apps/establishment/serializers/common.py | 9 +++-- apps/establishment/urls/common.py | 12 +++---- apps/establishment/views/web.py | 15 +++++--- apps/news/migrations/0010_news_slug.py | 33 ++++++++++++++++++ apps/news/models.py | 11 ++++-- apps/news/serializers/common.py | 0 apps/news/urls/web.py | 2 +- apps/news/views/common.py | 0 apps/search_indexes/views.py | 4 +-- 14 files changed, 149 insertions(+), 21 deletions(-) create mode 100644 apps/collection/migrations/0012_collection_slug.py create mode 100644 apps/establishment/migrations/0029_establishment_slug.py create mode 100644 apps/news/migrations/0010_news_slug.py create mode 100644 apps/news/serializers/common.py create mode 100644 apps/news/views/common.py diff --git a/apps/collection/migrations/0012_collection_slug.py b/apps/collection/migrations/0012_collection_slug.py new file mode 100644 index 00000000..7fb683c2 --- /dev/null +++ b/apps/collection/migrations/0012_collection_slug.py @@ -0,0 +1,34 @@ +# Generated by Django 2.2.4 on 2019-09-23 12:55 + +from django.db import migrations +import django_extensions.db.fields + +from collection.models import Collection + + +def migrate_data_forward(apps, schema_editor): + for instance in Collection.objects.all(): + print("Generating slug for %s" % instance) + instance.save() # Will trigger slug update + +def migrate_data_backward(apps, schema_editor): + pass + + +class Migration(migrations.Migration): + + dependencies = [ + ('collection', '0011_auto_20190920_1059'), + ] + + operations = [ + migrations.AddField( + model_name='collection', + name='slug', + field=django_extensions.db.fields.AutoSlugField(blank=True, editable=True, populate_from=['name', 'pk'], db_index=True, verbose_name='Collection slug'), + ), + migrations.RunPython( + migrate_data_forward, + migrate_data_backward, + ), + ] diff --git a/apps/collection/models.py b/apps/collection/models.py index 928370d7..5406abf5 100644 --- a/apps/collection/models.py +++ b/apps/collection/models.py @@ -1,5 +1,7 @@ from django.contrib.postgres.fields import JSONField from django.contrib.contenttypes.fields import ContentType +from django_extensions.db.fields import AutoSlugField + from utils.models import TJSONField from django.db import models from django.utils.translation import gettext_lazy as _ @@ -67,6 +69,8 @@ class Collection(ProjectBaseMixin, CollectionNameMixin, CollectionDateMixin, description = TJSONField( _('description'), null=True, blank=True, default=None, help_text='{"en-GB":"some text"}') + slug = AutoSlugField(max_length=50, db_index=True, populate_from=['name', 'pk'], + verbose_name=_('Collection slug'), editable=True) objects = CollectionQuerySet.as_manager() diff --git a/apps/establishment/migrations/0029_establishment_slug.py b/apps/establishment/migrations/0029_establishment_slug.py new file mode 100644 index 00000000..6cc01122 --- /dev/null +++ b/apps/establishment/migrations/0029_establishment_slug.py @@ -0,0 +1,33 @@ +# Generated by Django 2.2.4 on 2019-09-23 12:55 + +from django.db import migrations +import django_extensions.db.fields + +from establishment.models import Establishment + + +def migrate_data_forward(apps, schema_editor): + for instance in Establishment.objects.all(): + print("Generating slug for %s" % instance) + instance.save() # Will trigger slug update + +def migrate_data_backward(apps, schema_editor): + pass + +class Migration(migrations.Migration): + + dependencies = [ + ('establishment', '0028_auto_20190920_1205'), + ] + + operations = [ + migrations.AddField( + model_name='establishment', + name='slug', + field=django_extensions.db.fields.AutoSlugField(blank=True, editable=True, populate_from=['name'], db_index=True, verbose_name='Establishment slug'), + ), + migrations.RunPython( + migrate_data_forward, + migrate_data_backward, + ), + ] diff --git a/apps/establishment/models.py b/apps/establishment/models.py index 5b188c3c..729aec00 100644 --- a/apps/establishment/models.py +++ b/apps/establishment/models.py @@ -9,6 +9,7 @@ from django.core.exceptions import ValidationError from django.db import models from django.utils import timezone from django.utils.translation import gettext_lazy as _ +from django_extensions.db.fields import AutoSlugField from phonenumber_field.modelfields import PhoneNumberField from location.models import Address @@ -166,15 +167,15 @@ class EstablishmentQuerySet(models.QuerySet): total_mark=(models.F('distance_mark') + models.F('additional_mark')) * models.F('intermediate_public_mark')) - def similar(self, establishment_pk: int): + def similar(self, establishment_slug: str): """ Return QuerySet with objects that similar to Establishment. - :param establishment_pk: integer + :param establishment_slug: str Establishment slug """ - establishment_qs = Establishment.objects.filter(pk=establishment_pk) + establishment_qs = Establishment.objects.filter(slug=establishment_slug) if establishment_qs.exists(): establishment = establishment_qs.first() - return self.exclude(pk=establishment_pk) \ + return self.exclude(slug=establishment_slug) \ .filter(is_publish=True, image_url__isnull=False, reviews__isnull=False, @@ -277,6 +278,8 @@ class Establishment(ProjectBaseMixin, URLImageMixin, TranslatedFieldsMixin): verbose_name=_('Collections')) preview_image_url = models.URLField(verbose_name=_('Preview image URL path'), blank=True, null=True, default=None) + slug = AutoSlugField(db_index=True, max_length=50, populate_from=['name'], + verbose_name=_('Establishment slug'), editable=True) awards = generic.GenericRelation(to='main.Award') tags = generic.GenericRelation(to='main.MetaDataContent') diff --git a/apps/establishment/serializers/back.py b/apps/establishment/serializers/back.py index 7199eb54..41692b45 100644 --- a/apps/establishment/serializers/back.py +++ b/apps/establishment/serializers/back.py @@ -20,6 +20,7 @@ class EstablishmentListCreateSerializer(EstablishmentBaseSerializer): phones = ContactPhonesSerializer(read_only=True, many=True, ) emails = ContactEmailsSerializer(read_only=True, many=True, ) socials = SocialNetworkRelatedSerializers(read_only=True, many=True, ) + slug = serializers.SlugField(allow_blank=True) class Meta: model = models.Establishment @@ -35,6 +36,7 @@ class EstablishmentListCreateSerializer(EstablishmentBaseSerializer): 'type', 'socials', 'image_url', + 'slug', # TODO: check in admin filters 'is_publish' ] diff --git a/apps/establishment/serializers/common.py b/apps/establishment/serializers/common.py index 2edf811c..15b183f8 100644 --- a/apps/establishment/serializers/common.py +++ b/apps/establishment/serializers/common.py @@ -146,6 +146,7 @@ class EstablishmentBaseSerializer(serializers.ModelSerializer): subtypes = EstablishmentSubTypeSerializer(many=True) address = AddressSerializer() tags = MetaDataContentSerializer(many=True) + slug = serializers.SlugField(allow_blank=True) class Meta: """Meta class.""" @@ -162,6 +163,7 @@ class EstablishmentBaseSerializer(serializers.ModelSerializer): 'subtypes', 'address', 'tags', + 'slug', ] @@ -197,6 +199,8 @@ class EstablishmentDetailSerializer(EstablishmentListSerializer): best_price_menu = serializers.DecimalField(max_digits=14, decimal_places=2, read_only=True) best_price_carte = serializers.DecimalField(max_digits=14, decimal_places=2, read_only=True) + slug = serializers.SlugField(read_only=True) + in_favorites = serializers.SerializerMethodField() image = serializers.URLField(source='image_url') @@ -224,6 +228,7 @@ class EstablishmentDetailSerializer(EstablishmentListSerializer): 'best_price_menu', 'best_price_carte', 'transportation', + 'slug', ] def get_review(self, obj): @@ -261,8 +266,8 @@ class EstablishmentCommentCreateSerializer(comment_serializers.CommentSerializer def validate(self, attrs): """Override validate method""" # Check establishment object - establishment_id = self.context.get('request').parser_context.get('kwargs').get('pk') - establishment_qs = models.Establishment.objects.filter(id=establishment_id) + establishment_slug = self.context.get('request').parser_context.get('kwargs').get('slug') + establishment_qs = models.Establishment.objects.filter(slug=establishment_slug) if not establishment_qs.exists(): raise serializers.ValidationError({'detail': _('Establishment not found.')}) attrs['establishment'] = establishment_qs.first() diff --git a/apps/establishment/urls/common.py b/apps/establishment/urls/common.py index 1d1379ee..bd53c7eb 100644 --- a/apps/establishment/urls/common.py +++ b/apps/establishment/urls/common.py @@ -8,13 +8,13 @@ app_name = 'establishment' urlpatterns = [ path('', views.EstablishmentListView.as_view(), name='list'), path('tags/', views.EstablishmentTagListView.as_view(), name='tags'), - path('/', views.EstablishmentRetrieveView.as_view(), name='detail'), - path('/similar/', views.EstablishmentSimilarListView.as_view(), name='similar'), - path('/comments/', views.EstablishmentCommentListView.as_view(), name='list-comments'), - path('/comments/create/', views.EstablishmentCommentCreateView.as_view(), + path('/', views.EstablishmentRetrieveView.as_view(), name='detail'), + path('/similar/', views.EstablishmentSimilarListView.as_view(), name='similar'), + path('/comments/', views.EstablishmentCommentListView.as_view(), name='list-comments'), + path('/comments/create/', views.EstablishmentCommentCreateView.as_view(), name='create-comment'), - path('/comments//', views.EstablishmentCommentRUDView.as_view(), + path('/comments//', views.EstablishmentCommentRUDView.as_view(), name='rud-comment'), - path('/favorites/', views.EstablishmentFavoritesCreateDestroyView.as_view(), + path('/favorites/', views.EstablishmentFavoritesCreateDestroyView.as_view(), name='add-to-favorites') ] diff --git a/apps/establishment/views/web.py b/apps/establishment/views/web.py index 441f89c4..ce2bed05 100644 --- a/apps/establishment/views/web.py +++ b/apps/establishment/views/web.py @@ -30,11 +30,12 @@ class EstablishmentSimilarListView(EstablishmentListView): def get_queryset(self): """Override get_queryset method""" - return super().get_queryset().similar(establishment_pk=self.kwargs.get('pk'))\ + return super().get_queryset().similar(establishment_slug=self.kwargs.get('slug'))\ .order_by('-total_mark')[:13] class EstablishmentRetrieveView(EstablishmentMixin, generics.RetrieveAPIView): """Resource for getting a establishment.""" + lookup_field = 'slug' serializer_class = serializers.EstablishmentDetailSerializer @@ -48,6 +49,7 @@ class EstablishmentTypeListView(generics.ListAPIView): class EstablishmentCommentCreateView(generics.CreateAPIView): """View for create new comment.""" + lookup_field = 'slug' serializer_class = serializers.EstablishmentCommentCreateSerializer queryset = comment_models.Comment.objects.all() @@ -59,9 +61,11 @@ class EstablishmentCommentListView(generics.ListAPIView): def get_queryset(self): """Override get_queryset method""" + + establishment = get_object_or_404(models.Establishment, slug=self.kwargs['slug']) return comment_models.Comment.objects.by_content_type(app_label='establishment', model='establishment')\ - .by_object_id(object_id=self.kwargs.get('pk'))\ + .by_object_id(object_id=establishment.pk)\ .order_by('-created') @@ -77,7 +81,7 @@ class EstablishmentCommentRUDView(generics.RetrieveUpdateDestroyAPIView): queryset = self.filter_queryset(self.get_queryset()) establishment_obj = get_object_or_404(queryset, - pk=self.kwargs['pk']) + slug=self.kwargs['slug']) comment_obj = get_object_or_404(establishment_obj.comments.by_user(self.request.user), pk=self.kwargs['comment_id']) @@ -90,15 +94,18 @@ class EstablishmentCommentRUDView(generics.RetrieveUpdateDestroyAPIView): class EstablishmentFavoritesCreateDestroyView(generics.CreateAPIView, generics.DestroyAPIView): """View for create/destroy establishment from favorites.""" serializer_class = serializers.EstablishmentFavoritesCreateSerializer + lookup_field = 'slug' def get_object(self): """ Returns the object the view is displaying. """ + establishment_obj = get_object_or_404(models.Establishment, + slug=self.kwargs['slug']) obj = get_object_or_404( self.request.user.favorites.by_content_type(app_label='establishment', model='establishment') - .by_object_id(object_id=self.kwargs['pk'])) + .by_object_id(object_id=establishment_obj.pk)) # May raise a permission denied self.check_object_permissions(self.request, obj) return obj diff --git a/apps/news/migrations/0010_news_slug.py b/apps/news/migrations/0010_news_slug.py new file mode 100644 index 00000000..367357d3 --- /dev/null +++ b/apps/news/migrations/0010_news_slug.py @@ -0,0 +1,33 @@ +# Generated by Django 2.2.4 on 2019-09-23 12:55 + +from django.db import migrations +import django_extensions.db.fields + +from news.models import News + +def migrate_data_forward(apps, schema_editor): + for instance in News.objects.all(): + print("Generating slug for %s" % instance) + instance.save() # Will trigger slug update + +def migrate_data_backward(apps, schema_editor): + pass + + +class Migration(migrations.Migration): + + dependencies = [ + ('news', '0009_auto_20190901_1032'), + ] + + operations = [ + migrations.AddField( + model_name='news', + name='slug', + field=django_extensions.db.fields.AutoSlugField(blank=True, editable=True, populate_from=['title'], db_index=True, verbose_name='News slug'), + ), + migrations.RunPython( + migrate_data_forward, + migrate_data_backward, + ), + ] diff --git a/apps/news/models.py b/apps/news/models.py index bf61f51a..83e44e6c 100644 --- a/apps/news/models.py +++ b/apps/news/models.py @@ -3,6 +3,7 @@ from django.db import models from django.contrib.contenttypes import fields as generic from django.utils import timezone from django.utils.translation import gettext_lazy as _ +from django_extensions.db.fields import AutoSlugField from rest_framework.reverse import reverse from utils.models import BaseAttributes, TJSONField, TranslatedFieldsMixin @@ -49,6 +50,10 @@ class NewsQuerySet(models.QuerySet): class News(BaseAttributes, TranslatedFieldsMixin): """News model.""" + image = models.ForeignKey( + 'gallery.Image', null=True, blank=True, default=None, + verbose_name=_('News image'), on_delete=models.CASCADE) + news_type = models.ForeignKey(NewsType, on_delete=models.PROTECT, verbose_name=_('news type')) title = TJSONField(blank=True, null=True, default=None, @@ -63,6 +68,8 @@ class News(BaseAttributes, TranslatedFieldsMixin): start = models.DateTimeField(verbose_name=_('Start')) end = models.DateTimeField(blank=True, null=True, default=None, verbose_name=_('End')) + slug = AutoSlugField(db_index=True, max_length=50, populate_from=['title'], + verbose_name=_('News slug'), editable=True,) playlist = models.IntegerField(_('playlist')) is_publish = models.BooleanField(default=False, verbose_name=_('Publish status')) @@ -93,8 +100,8 @@ class News(BaseAttributes, TranslatedFieldsMixin): verbose_name_plural = _('news') def __str__(self): - return f'news: {self.id}' + return f'news: {self.slug}' @property def web_url(self): - return reverse('web:news:rud', kwargs={'pk': self.pk}) + return reverse('web:news:rud', kwargs={'slug': self.slug}) diff --git a/apps/news/serializers/common.py b/apps/news/serializers/common.py new file mode 100644 index 00000000..e69de29b diff --git a/apps/news/urls/web.py b/apps/news/urls/web.py index 9ec7e644..c483b05a 100644 --- a/apps/news/urls/web.py +++ b/apps/news/urls/web.py @@ -6,6 +6,6 @@ app_name = 'news' urlpatterns = [ path('', views.NewsListView.as_view(), name='list'), - path('/', views.NewsDetailView.as_view(), name='rud'), + path('/', views.NewsDetailView.as_view(), name='rud'), path('types/', views.NewsTypeListView.as_view(), name='type'), ] diff --git a/apps/news/views/common.py b/apps/news/views/common.py new file mode 100644 index 00000000..e69de29b diff --git a/apps/search_indexes/views.py b/apps/search_indexes/views.py index 1547fd9d..72cab583 100644 --- a/apps/search_indexes/views.py +++ b/apps/search_indexes/views.py @@ -13,7 +13,7 @@ class NewsDocumentViewSet(BaseDocumentViewSet): """News document ViewSet.""" document = NewsDocument - lookup_field = 'id' + lookup_field = 'slug' pagination_class = PageNumberPagination permission_classes = (permissions.AllowAny,) serializer_class = serializers.NewsDocumentSerializer @@ -39,7 +39,7 @@ class EstablishmentDocumentViewSet(BaseDocumentViewSet): """Establishment document ViewSet.""" document = EstablishmentDocument - lookup_field = 'id' + lookup_field = 'slug' pagination_class = PageNumberPagination permission_classes = (permissions.AllowAny,) serializer_class = serializers.EstablishmentDocumentSerializer From 6420a676df4ef4c92eb6fda1c0629da68424eb44 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Mon, 23 Sep 2019 18:02:42 +0300 Subject: [PATCH 2/8] create slugs manually --- apps/collection/models.py | 5 ++--- apps/collection/urls/common.py | 2 +- apps/collection/views/common.py | 3 ++- apps/establishment/models.py | 3 +-- apps/establishment/serializers/back.py | 2 +- apps/establishment/serializers/common.py | 4 ++-- apps/news/models.py | 3 +-- 7 files changed, 10 insertions(+), 12 deletions(-) diff --git a/apps/collection/models.py b/apps/collection/models.py index 5406abf5..beec9b08 100644 --- a/apps/collection/models.py +++ b/apps/collection/models.py @@ -1,6 +1,5 @@ from django.contrib.postgres.fields import JSONField from django.contrib.contenttypes.fields import ContentType -from django_extensions.db.fields import AutoSlugField from utils.models import TJSONField from django.db import models @@ -69,8 +68,8 @@ class Collection(ProjectBaseMixin, CollectionNameMixin, CollectionDateMixin, description = TJSONField( _('description'), null=True, blank=True, default=None, help_text='{"en-GB":"some text"}') - slug = AutoSlugField(max_length=50, db_index=True, populate_from=['name', 'pk'], - verbose_name=_('Collection slug'), editable=True) + slug = models.SlugField(max_length=50, unique=True, + verbose_name=_('Collection slug'), editable=True, null=True) objects = CollectionQuerySet.as_manager() diff --git a/apps/collection/urls/common.py b/apps/collection/urls/common.py index 41414a10..01385c3d 100644 --- a/apps/collection/urls/common.py +++ b/apps/collection/urls/common.py @@ -7,7 +7,7 @@ app_name = 'collection' urlpatterns = [ path('', views.CollectionListView.as_view(), name='list'), - path('/establishments/', views.CollectionEstablishmentListView.as_view(), + path('/establishments/', views.CollectionEstablishmentListView.as_view(), name='detail'), path('guides/', views.GuideListView.as_view(), name='guides-list'), diff --git a/apps/collection/views/common.py b/apps/collection/views/common.py index 8d2eb109..d42bd851 100644 --- a/apps/collection/views/common.py +++ b/apps/collection/views/common.py @@ -40,6 +40,7 @@ class CollectionEstablishmentListView(CollectionListView): permission_classes = (permissions.AllowAny,) pagination_class = ProjectPageNumberPagination serializer_class = EstablishmentListSerializer + lookup_field = 'slug' def get_queryset(self): """ @@ -47,7 +48,7 @@ class CollectionEstablishmentListView(CollectionListView): """ queryset = super(CollectionEstablishmentListView, self).get_queryset() # Perform the lookup filtering. - collection = get_object_or_404(queryset, pk=self.kwargs['pk']) + collection = get_object_or_404(queryset, slug=self.kwargs['slug']) # May raise a permission denied self.check_object_permissions(self.request, collection) diff --git a/apps/establishment/models.py b/apps/establishment/models.py index 729aec00..e3384dfb 100644 --- a/apps/establishment/models.py +++ b/apps/establishment/models.py @@ -9,7 +9,6 @@ from django.core.exceptions import ValidationError from django.db import models from django.utils import timezone from django.utils.translation import gettext_lazy as _ -from django_extensions.db.fields import AutoSlugField from phonenumber_field.modelfields import PhoneNumberField from location.models import Address @@ -278,7 +277,7 @@ class Establishment(ProjectBaseMixin, URLImageMixin, TranslatedFieldsMixin): verbose_name=_('Collections')) preview_image_url = models.URLField(verbose_name=_('Preview image URL path'), blank=True, null=True, default=None) - slug = AutoSlugField(db_index=True, max_length=50, populate_from=['name'], + slug = models.SlugField(unique=True, max_length=50, null=True, verbose_name=_('Establishment slug'), editable=True) awards = generic.GenericRelation(to='main.Award') diff --git a/apps/establishment/serializers/back.py b/apps/establishment/serializers/back.py index 41692b45..b4d8e747 100644 --- a/apps/establishment/serializers/back.py +++ b/apps/establishment/serializers/back.py @@ -20,7 +20,7 @@ class EstablishmentListCreateSerializer(EstablishmentBaseSerializer): phones = ContactPhonesSerializer(read_only=True, many=True, ) emails = ContactEmailsSerializer(read_only=True, many=True, ) socials = SocialNetworkRelatedSerializers(read_only=True, many=True, ) - slug = serializers.SlugField(allow_blank=True) + slug = serializers.SlugField(required=True, allow_blank=False) class Meta: model = models.Establishment diff --git a/apps/establishment/serializers/common.py b/apps/establishment/serializers/common.py index 15b183f8..e1cf312c 100644 --- a/apps/establishment/serializers/common.py +++ b/apps/establishment/serializers/common.py @@ -146,7 +146,7 @@ class EstablishmentBaseSerializer(serializers.ModelSerializer): subtypes = EstablishmentSubTypeSerializer(many=True) address = AddressSerializer() tags = MetaDataContentSerializer(many=True) - slug = serializers.SlugField(allow_blank=True) + slug = serializers.SlugField(allow_blank=False, required=True) class Meta: """Meta class.""" @@ -199,7 +199,7 @@ class EstablishmentDetailSerializer(EstablishmentListSerializer): best_price_menu = serializers.DecimalField(max_digits=14, decimal_places=2, read_only=True) best_price_carte = serializers.DecimalField(max_digits=14, decimal_places=2, read_only=True) - slug = serializers.SlugField(read_only=True) + slug = serializers.SlugField(required=True, allow_blank=False,) in_favorites = serializers.SerializerMethodField() diff --git a/apps/news/models.py b/apps/news/models.py index 83e44e6c..5e7fbb9d 100644 --- a/apps/news/models.py +++ b/apps/news/models.py @@ -3,7 +3,6 @@ from django.db import models from django.contrib.contenttypes import fields as generic from django.utils import timezone from django.utils.translation import gettext_lazy as _ -from django_extensions.db.fields import AutoSlugField from rest_framework.reverse import reverse from utils.models import BaseAttributes, TJSONField, TranslatedFieldsMixin @@ -68,7 +67,7 @@ class News(BaseAttributes, TranslatedFieldsMixin): start = models.DateTimeField(verbose_name=_('Start')) end = models.DateTimeField(blank=True, null=True, default=None, verbose_name=_('End')) - slug = AutoSlugField(db_index=True, max_length=50, populate_from=['title'], + slug = models.SlugField(unique=True, max_length=50, null=True, verbose_name=_('News slug'), editable=True,) playlist = models.IntegerField(_('playlist')) is_publish = models.BooleanField(default=False, From 73a858cc8c01b89fc66925c46c57c253e12a29ae Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Mon, 23 Sep 2019 18:21:59 +0300 Subject: [PATCH 3/8] Slugs feature migrations --- .../migrations/0013_auto_20190923_1505.py | 38 ++++++++++++++++++ .../migrations/0030_auto_20190923_1505.py | 39 +++++++++++++++++++ .../migrations/0011_auto_20190923_1505.py | 38 ++++++++++++++++++ 3 files changed, 115 insertions(+) create mode 100644 apps/collection/migrations/0013_auto_20190923_1505.py create mode 100644 apps/establishment/migrations/0030_auto_20190923_1505.py create mode 100644 apps/news/migrations/0011_auto_20190923_1505.py diff --git a/apps/collection/migrations/0013_auto_20190923_1505.py b/apps/collection/migrations/0013_auto_20190923_1505.py new file mode 100644 index 00000000..6a44ee57 --- /dev/null +++ b/apps/collection/migrations/0013_auto_20190923_1505.py @@ -0,0 +1,38 @@ +# Generated by Django 2.2.4 on 2019-09-23 15:05 +from django.core.validators import EMPTY_VALUES +from django.db import migrations, models + +from collection.models import Collection + + +def migrate_data_forward(apps, schema_editor): + for instance in Collection.objects.all(): + if instance.slug in EMPTY_VALUES: + instance.slug = None + instance.save(update_fields=['slug']) + +def migrate_data_backward(apps, schema_editor): + pass + +class Migration(migrations.Migration): + + dependencies = [ + ('collection', '0012_collection_slug'), + ] + + operations = [ + migrations.AlterField( + model_name='collection', + name='slug', + field=models.SlugField(null=True, verbose_name='Collection slug'), + ), + migrations.RunPython( + migrate_data_forward, + migrate_data_backward, + ), + migrations.AlterField( + model_name='collection', + name='slug', + field=models.SlugField(null=True, unique=True, verbose_name='Collection slug'), + ), + ] diff --git a/apps/establishment/migrations/0030_auto_20190923_1505.py b/apps/establishment/migrations/0030_auto_20190923_1505.py new file mode 100644 index 00000000..9614eca1 --- /dev/null +++ b/apps/establishment/migrations/0030_auto_20190923_1505.py @@ -0,0 +1,39 @@ +# Generated by Django 2.2.4 on 2019-09-23 15:05 +from django.core.validators import EMPTY_VALUES +from django.db import migrations, models + +from establishment.models import Establishment + + +def migrate_data_forward(apps, schema_editor): + for instance in Establishment.objects.all(): + if instance.slug in EMPTY_VALUES: + instance.slug = None + instance.save(update_fields=['slug']) + +def migrate_data_backward(apps, schema_editor): + pass + + +class Migration(migrations.Migration): + + dependencies = [ + ('establishment', '0029_establishment_slug'), + ] + + operations = [ + migrations.AlterField( + model_name='establishment', + name='slug', + field=models.SlugField(null=True, verbose_name='Establishment slug'), + ), + migrations.RunPython( + migrate_data_forward, + migrate_data_backward, + ), + migrations.AlterField( + model_name='establishment', + name='slug', + field=models.SlugField(unique=True, null=True, verbose_name='Establishment slug'), + ), + ] diff --git a/apps/news/migrations/0011_auto_20190923_1505.py b/apps/news/migrations/0011_auto_20190923_1505.py new file mode 100644 index 00000000..b56a2d12 --- /dev/null +++ b/apps/news/migrations/0011_auto_20190923_1505.py @@ -0,0 +1,38 @@ +# Generated by Django 2.2.4 on 2019-09-23 15:05 +from django.core.validators import EMPTY_VALUES +from django.db import migrations, models + +from news.models import News + + +def migrate_data_forward(apps, schema_editor): + for instance in News.objects.all(): + if instance.slug in EMPTY_VALUES: + instance.slug = None + instance.save(update_fields=['slug']) + +def migrate_data_backward(apps, schema_editor): + pass + +class Migration(migrations.Migration): + + dependencies = [ + ('news', '0010_news_slug'), + ] + + operations = [ + migrations.AlterField( + model_name='news', + name='slug', + field=models.SlugField(null=True, verbose_name='News slug'), + ), + migrations.RunPython( + migrate_data_forward, + migrate_data_backward, + ), + migrations.AlterField( + model_name='news', + name='slug', + field=models.SlugField(null=True, unique=True, verbose_name='News slug'), + ), + ] From 2cc0d01d79021a006c3ff6763215f60ee0a89053 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Mon, 23 Sep 2019 18:49:27 +0300 Subject: [PATCH 4/8] Fix issues after rebase --- apps/news/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/news/views.py b/apps/news/views.py index 7d6da3f7..5f531305 100644 --- a/apps/news/views.py +++ b/apps/news/views.py @@ -26,7 +26,7 @@ class NewsListView(NewsMixinView, generics.ListAPIView): class NewsDetailView(NewsMixinView, generics.RetrieveAPIView): """News detail view.""" - + lookup_field = 'slug' serializer_class = serializers.NewsDetailSerializer From d224c77a01129b656987aa750c762403db54fa6d Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Tue, 24 Sep 2019 12:06:11 +0300 Subject: [PATCH 5/8] Fix issues with test && recreate migrations --- .../migrations/0012_collection_slug.py | 34 ---------------- .../migrations/0013_auto_20190923_1505.py | 38 ------------------ .../migrations/0013_collection_slug.py | 18 +++++++++ apps/collection/tests.py | 13 ++++--- .../migrations/0029_establishment_slug.py | 33 ---------------- .../migrations/0030_auto_20190923_1505.py | 39 ------------------- .../migrations/0031_establishment_slug.py | 18 +++++++++ apps/establishment/tests.py | 6 ++- apps/favorites/tests.py | 1 - apps/news/migrations/0010_news_slug.py | 33 ---------------- .../migrations/0011_auto_20190923_1505.py | 38 ------------------ .../migrations/0013_auto_20190924_0806.py | 25 ++++++++++++ apps/news/tests.py | 11 +++--- apps/news/urls/back.py | 1 + apps/news/views.py | 1 - 15 files changed, 79 insertions(+), 230 deletions(-) delete mode 100644 apps/collection/migrations/0012_collection_slug.py delete mode 100644 apps/collection/migrations/0013_auto_20190923_1505.py create mode 100644 apps/collection/migrations/0013_collection_slug.py delete mode 100644 apps/establishment/migrations/0029_establishment_slug.py delete mode 100644 apps/establishment/migrations/0030_auto_20190923_1505.py create mode 100644 apps/establishment/migrations/0031_establishment_slug.py delete mode 100644 apps/news/migrations/0010_news_slug.py delete mode 100644 apps/news/migrations/0011_auto_20190923_1505.py create mode 100644 apps/news/migrations/0013_auto_20190924_0806.py diff --git a/apps/collection/migrations/0012_collection_slug.py b/apps/collection/migrations/0012_collection_slug.py deleted file mode 100644 index 7fb683c2..00000000 --- a/apps/collection/migrations/0012_collection_slug.py +++ /dev/null @@ -1,34 +0,0 @@ -# Generated by Django 2.2.4 on 2019-09-23 12:55 - -from django.db import migrations -import django_extensions.db.fields - -from collection.models import Collection - - -def migrate_data_forward(apps, schema_editor): - for instance in Collection.objects.all(): - print("Generating slug for %s" % instance) - instance.save() # Will trigger slug update - -def migrate_data_backward(apps, schema_editor): - pass - - -class Migration(migrations.Migration): - - dependencies = [ - ('collection', '0011_auto_20190920_1059'), - ] - - operations = [ - migrations.AddField( - model_name='collection', - name='slug', - field=django_extensions.db.fields.AutoSlugField(blank=True, editable=True, populate_from=['name', 'pk'], db_index=True, verbose_name='Collection slug'), - ), - migrations.RunPython( - migrate_data_forward, - migrate_data_backward, - ), - ] diff --git a/apps/collection/migrations/0013_auto_20190923_1505.py b/apps/collection/migrations/0013_auto_20190923_1505.py deleted file mode 100644 index 6a44ee57..00000000 --- a/apps/collection/migrations/0013_auto_20190923_1505.py +++ /dev/null @@ -1,38 +0,0 @@ -# Generated by Django 2.2.4 on 2019-09-23 15:05 -from django.core.validators import EMPTY_VALUES -from django.db import migrations, models - -from collection.models import Collection - - -def migrate_data_forward(apps, schema_editor): - for instance in Collection.objects.all(): - if instance.slug in EMPTY_VALUES: - instance.slug = None - instance.save(update_fields=['slug']) - -def migrate_data_backward(apps, schema_editor): - pass - -class Migration(migrations.Migration): - - dependencies = [ - ('collection', '0012_collection_slug'), - ] - - operations = [ - migrations.AlterField( - model_name='collection', - name='slug', - field=models.SlugField(null=True, verbose_name='Collection slug'), - ), - migrations.RunPython( - migrate_data_forward, - migrate_data_backward, - ), - migrations.AlterField( - model_name='collection', - name='slug', - field=models.SlugField(null=True, unique=True, verbose_name='Collection slug'), - ), - ] diff --git a/apps/collection/migrations/0013_collection_slug.py b/apps/collection/migrations/0013_collection_slug.py new file mode 100644 index 00000000..cf7f5929 --- /dev/null +++ b/apps/collection/migrations/0013_collection_slug.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.4 on 2019-09-24 08:06 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('collection', '0012_auto_20190923_1340'), + ] + + operations = [ + migrations.AddField( + model_name='collection', + name='slug', + field=models.SlugField(null=True, unique=True, verbose_name='Collection slug'), + ), + ] diff --git a/apps/collection/tests.py b/apps/collection/tests.py index 463d5fe5..6a985fc0 100644 --- a/apps/collection/tests.py +++ b/apps/collection/tests.py @@ -20,11 +20,11 @@ class BaseTestCase(APITestCase): self.newsletter = True self.user = User.objects.create_user( username=self.username, email=self.email, password=self.password) - #get tokkens - tokkens = User.create_jwt_tokens(self.user) + #get tokens + tokens = User.create_jwt_tokens(self.user) self.client.cookies = SimpleCookie( - {'access_token': tokkens.get('access_token'), - 'refresh_token': tokkens.get('refresh_token'), + {'access_token': tokens.get('access_token'), + 'refresh_token': tokens.get('refresh_token'), 'country_code': 'en'}) @@ -51,11 +51,12 @@ class CollectionDetailTests(BaseTestCase): is_publish=True, start=datetime.now(pytz.utc), end=datetime.now(pytz.utc), - country=country + country=country, + slug='test-collection-slug', ) def test_collection_detail_Read(self): - response = self.client.get(f'/api/web/collections/{self.collection.id}/establishments/?country_code=en', + response = self.client.get(f'/api/web/collections/{self.collection.slug}/establishments/?country_code=en', format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) diff --git a/apps/establishment/migrations/0029_establishment_slug.py b/apps/establishment/migrations/0029_establishment_slug.py deleted file mode 100644 index 6cc01122..00000000 --- a/apps/establishment/migrations/0029_establishment_slug.py +++ /dev/null @@ -1,33 +0,0 @@ -# Generated by Django 2.2.4 on 2019-09-23 12:55 - -from django.db import migrations -import django_extensions.db.fields - -from establishment.models import Establishment - - -def migrate_data_forward(apps, schema_editor): - for instance in Establishment.objects.all(): - print("Generating slug for %s" % instance) - instance.save() # Will trigger slug update - -def migrate_data_backward(apps, schema_editor): - pass - -class Migration(migrations.Migration): - - dependencies = [ - ('establishment', '0028_auto_20190920_1205'), - ] - - operations = [ - migrations.AddField( - model_name='establishment', - name='slug', - field=django_extensions.db.fields.AutoSlugField(blank=True, editable=True, populate_from=['name'], db_index=True, verbose_name='Establishment slug'), - ), - migrations.RunPython( - migrate_data_forward, - migrate_data_backward, - ), - ] diff --git a/apps/establishment/migrations/0030_auto_20190923_1505.py b/apps/establishment/migrations/0030_auto_20190923_1505.py deleted file mode 100644 index 9614eca1..00000000 --- a/apps/establishment/migrations/0030_auto_20190923_1505.py +++ /dev/null @@ -1,39 +0,0 @@ -# Generated by Django 2.2.4 on 2019-09-23 15:05 -from django.core.validators import EMPTY_VALUES -from django.db import migrations, models - -from establishment.models import Establishment - - -def migrate_data_forward(apps, schema_editor): - for instance in Establishment.objects.all(): - if instance.slug in EMPTY_VALUES: - instance.slug = None - instance.save(update_fields=['slug']) - -def migrate_data_backward(apps, schema_editor): - pass - - -class Migration(migrations.Migration): - - dependencies = [ - ('establishment', '0029_establishment_slug'), - ] - - operations = [ - migrations.AlterField( - model_name='establishment', - name='slug', - field=models.SlugField(null=True, verbose_name='Establishment slug'), - ), - migrations.RunPython( - migrate_data_forward, - migrate_data_backward, - ), - migrations.AlterField( - model_name='establishment', - name='slug', - field=models.SlugField(unique=True, null=True, verbose_name='Establishment slug'), - ), - ] diff --git a/apps/establishment/migrations/0031_establishment_slug.py b/apps/establishment/migrations/0031_establishment_slug.py new file mode 100644 index 00000000..2ff68380 --- /dev/null +++ b/apps/establishment/migrations/0031_establishment_slug.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.4 on 2019-09-24 08:06 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('establishment', '0030_auto_20190923_1340'), + ] + + operations = [ + migrations.AddField( + model_name='establishment', + name='slug', + field=models.SlugField(null=True, unique=True, verbose_name='Establishment slug'), + ), + ] diff --git a/apps/establishment/tests.py b/apps/establishment/tests.py index 5de7d779..e4e3b02c 100644 --- a/apps/establishment/tests.py +++ b/apps/establishment/tests.py @@ -29,13 +29,15 @@ class BaseTestCase(APITestCase): class EstablishmentTests(BaseTestCase): def test_establishment_CRUD(self): - response = self.client.get('/api/back/establishments/', format='json') + params = {'page': 1, 'page_size': 1,} + response = self.client.get('/api/back/establishments/', params, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) data = { 'name': 'Test establishment', 'type_id': self.establishment_type.id, - 'is_publish': True + 'is_publish': True, + 'slug': 'test-establishment-slug', } response = self.client.post('/api/back/establishments/', data=data, format='json') diff --git a/apps/favorites/tests.py b/apps/favorites/tests.py index bc3313ae..208cf0db 100644 --- a/apps/favorites/tests.py +++ b/apps/favorites/tests.py @@ -38,7 +38,6 @@ class BaseTestCase(APITestCase): use_subtypes=False) self.test_establishment = Establishment.objects.create(name="test establishment", - name_transliterated="test-establishment", description={"en-GB": "description of test establishment"}, establishment_type=self.test_establishment_type, is_publish=True) diff --git a/apps/news/migrations/0010_news_slug.py b/apps/news/migrations/0010_news_slug.py deleted file mode 100644 index 367357d3..00000000 --- a/apps/news/migrations/0010_news_slug.py +++ /dev/null @@ -1,33 +0,0 @@ -# Generated by Django 2.2.4 on 2019-09-23 12:55 - -from django.db import migrations -import django_extensions.db.fields - -from news.models import News - -def migrate_data_forward(apps, schema_editor): - for instance in News.objects.all(): - print("Generating slug for %s" % instance) - instance.save() # Will trigger slug update - -def migrate_data_backward(apps, schema_editor): - pass - - -class Migration(migrations.Migration): - - dependencies = [ - ('news', '0009_auto_20190901_1032'), - ] - - operations = [ - migrations.AddField( - model_name='news', - name='slug', - field=django_extensions.db.fields.AutoSlugField(blank=True, editable=True, populate_from=['title'], db_index=True, verbose_name='News slug'), - ), - migrations.RunPython( - migrate_data_forward, - migrate_data_backward, - ), - ] diff --git a/apps/news/migrations/0011_auto_20190923_1505.py b/apps/news/migrations/0011_auto_20190923_1505.py deleted file mode 100644 index b56a2d12..00000000 --- a/apps/news/migrations/0011_auto_20190923_1505.py +++ /dev/null @@ -1,38 +0,0 @@ -# Generated by Django 2.2.4 on 2019-09-23 15:05 -from django.core.validators import EMPTY_VALUES -from django.db import migrations, models - -from news.models import News - - -def migrate_data_forward(apps, schema_editor): - for instance in News.objects.all(): - if instance.slug in EMPTY_VALUES: - instance.slug = None - instance.save(update_fields=['slug']) - -def migrate_data_backward(apps, schema_editor): - pass - -class Migration(migrations.Migration): - - dependencies = [ - ('news', '0010_news_slug'), - ] - - operations = [ - migrations.AlterField( - model_name='news', - name='slug', - field=models.SlugField(null=True, verbose_name='News slug'), - ), - migrations.RunPython( - migrate_data_forward, - migrate_data_backward, - ), - migrations.AlterField( - model_name='news', - name='slug', - field=models.SlugField(null=True, unique=True, verbose_name='News slug'), - ), - ] diff --git a/apps/news/migrations/0013_auto_20190924_0806.py b/apps/news/migrations/0013_auto_20190924_0806.py new file mode 100644 index 00000000..7d6d0e1f --- /dev/null +++ b/apps/news/migrations/0013_auto_20190924_0806.py @@ -0,0 +1,25 @@ +# Generated by Django 2.2.4 on 2019-09-24 08:06 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('gallery', '0001_initial'), + ('news', '0012_auto_20190923_1416'), + ] + + operations = [ + migrations.AddField( + model_name='news', + name='image', + field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='gallery.Image', verbose_name='News image'), + ), + migrations.AddField( + model_name='news', + name='slug', + field=models.SlugField(null=True, unique=True, verbose_name='News slug'), + ), + ] diff --git a/apps/news/tests.py b/apps/news/tests.py index bf6577d9..9ac8742c 100644 --- a/apps/news/tests.py +++ b/apps/news/tests.py @@ -1,8 +1,8 @@ from http.cookies import SimpleCookie -from django.test import TestCase from rest_framework.test import APITestCase from rest_framework import status +from datetime import datetime, timedelta from news.models import NewsType, News from account.models import User @@ -24,8 +24,9 @@ class BaseTestCase(APITestCase): self.test_news_type = NewsType.objects.create(name="Test news type") self.test_news = News.objects.create(created_by=self.user, modified_by=self.user, title={"en-GB": "Test news"}, news_type=self.test_news_type, description={"en-GB": "Description test news"}, - playlist=1, start="2020-12-03 12:00:00", end="2020-12-13 12:00:00", - is_publish=True) + playlist=1, start=datetime.now() + timedelta(hours=-2), + end=datetime.now() + timedelta(hours=2), + is_publish=True, slug='test-news-slug',) class NewsTestCase(BaseTestCase): @@ -35,10 +36,10 @@ class NewsTestCase(BaseTestCase): self.assertEqual(response.status_code, status.HTTP_200_OK) def test_news_detail(self): - response = self.client.get(f"/api/web/news/{self.test_news.id}/") + response = self.client.get(f"/api/web/news/{self.test_news.slug}/") self.assertEqual(response.status_code, status.HTTP_200_OK) def test_news_type_list(self): - response = self.client.get("/api/web/news/type/") + response = self.client.get("/api/web/news/types/") self.assertEqual(response.status_code, status.HTTP_200_OK) diff --git a/apps/news/urls/back.py b/apps/news/urls/back.py index 8522592e..5fec7a04 100644 --- a/apps/news/urls/back.py +++ b/apps/news/urls/back.py @@ -8,4 +8,5 @@ urlpatterns = [ path('', views.NewsBackOfficeLCView.as_view(), name='list-create'), path('/', views.NewsBackOfficeRUDView.as_view(), name='retrieve-update-destroy'), + path('types/', views.NewsTypeListView.as_view(), name='type-news'), ] \ No newline at end of file diff --git a/apps/news/views.py b/apps/news/views.py index 5f531305..74abe33f 100644 --- a/apps/news/views.py +++ b/apps/news/views.py @@ -20,7 +20,6 @@ class NewsMixinView: class NewsListView(NewsMixinView, generics.ListAPIView): """News list view.""" - filter_class = filters.NewsListFilterSet From 65914659e5031799d7742ff4fbb6d3a5eefb50ea Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Tue, 24 Sep 2019 12:31:35 +0300 Subject: [PATCH 6/8] Slugs serializers --- apps/collection/serializers/common.py | 2 ++ apps/establishment/serializers/back.py | 2 +- apps/establishment/serializers/common.py | 4 ++-- apps/news/serializers.py | 3 +++ apps/news/serializers/common.py | 0 5 files changed, 8 insertions(+), 3 deletions(-) delete mode 100644 apps/news/serializers/common.py diff --git a/apps/collection/serializers/common.py b/apps/collection/serializers/common.py index 85d66d30..601518fa 100644 --- a/apps/collection/serializers/common.py +++ b/apps/collection/serializers/common.py @@ -13,6 +13,7 @@ class CollectionSerializer(serializers.ModelSerializer): block_size = serializers.JSONField() is_publish = serializers.BooleanField() on_top = serializers.BooleanField() + slug = serializers.SlugField(allow_blank=False, required=True, unique=True, max_length=50) # REQUEST start = serializers.DateTimeField(write_only=True) @@ -34,6 +35,7 @@ class CollectionSerializer(serializers.ModelSerializer): 'on_top', 'country', 'block_size', + 'slug', ] diff --git a/apps/establishment/serializers/back.py b/apps/establishment/serializers/back.py index b4d8e747..ad278092 100644 --- a/apps/establishment/serializers/back.py +++ b/apps/establishment/serializers/back.py @@ -20,7 +20,7 @@ class EstablishmentListCreateSerializer(EstablishmentBaseSerializer): phones = ContactPhonesSerializer(read_only=True, many=True, ) emails = ContactEmailsSerializer(read_only=True, many=True, ) socials = SocialNetworkRelatedSerializers(read_only=True, many=True, ) - slug = serializers.SlugField(required=True, allow_blank=False) + slug = serializers.SlugField(required=True, allow_blank=False, unique=True, max_length=50) class Meta: model = models.Establishment diff --git a/apps/establishment/serializers/common.py b/apps/establishment/serializers/common.py index e1cf312c..6a8289de 100644 --- a/apps/establishment/serializers/common.py +++ b/apps/establishment/serializers/common.py @@ -146,7 +146,7 @@ class EstablishmentBaseSerializer(serializers.ModelSerializer): subtypes = EstablishmentSubTypeSerializer(many=True) address = AddressSerializer() tags = MetaDataContentSerializer(many=True) - slug = serializers.SlugField(allow_blank=False, required=True) + slug = serializers.SlugField(allow_blank=False, required=True, unique=True, max_length=50) class Meta: """Meta class.""" @@ -199,7 +199,7 @@ class EstablishmentDetailSerializer(EstablishmentListSerializer): best_price_menu = serializers.DecimalField(max_digits=14, decimal_places=2, read_only=True) best_price_carte = serializers.DecimalField(max_digits=14, decimal_places=2, read_only=True) - slug = serializers.SlugField(required=True, allow_blank=False,) + slug = serializers.SlugField(required=True, allow_blank=False, unique=True, max_length=50) in_favorites = serializers.SerializerMethodField() diff --git a/apps/news/serializers.py b/apps/news/serializers.py index 67d81501..5265e94c 100644 --- a/apps/news/serializers.py +++ b/apps/news/serializers.py @@ -28,6 +28,8 @@ class NewsBaseSerializer(serializers.ModelSerializer): news_type = NewsTypeSerializer(read_only=True) tags = MetaDataContentSerializer(read_only=True, many=True) + slug = serializers.SlugField(allow_blank=False, required=True, unique=True, max_length=50) + class Meta: """Meta class.""" @@ -41,6 +43,7 @@ class NewsBaseSerializer(serializers.ModelSerializer): 'preview_image_url', 'news_type', 'tags', + 'slug', ) diff --git a/apps/news/serializers/common.py b/apps/news/serializers/common.py deleted file mode 100644 index e69de29b..00000000 From 0b5e40640c17a918b156e377186239a63ae814f5 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Tue, 24 Sep 2019 12:36:52 +0300 Subject: [PATCH 7/8] Remove test url --- apps/news/urls/back.py | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/news/urls/back.py b/apps/news/urls/back.py index 5fec7a04..8522592e 100644 --- a/apps/news/urls/back.py +++ b/apps/news/urls/back.py @@ -8,5 +8,4 @@ urlpatterns = [ path('', views.NewsBackOfficeLCView.as_view(), name='list-create'), path('/', views.NewsBackOfficeRUDView.as_view(), name='retrieve-update-destroy'), - path('types/', views.NewsTypeListView.as_view(), name='type-news'), ] \ No newline at end of file From f49ea12108c01f283f42d02caf0a9d1db5dba81d Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Tue, 24 Sep 2019 12:39:08 +0300 Subject: [PATCH 8/8] Remove unnecessary field --- apps/news/migrations/0013_auto_20190924_0806.py | 5 ----- apps/news/models.py | 4 ---- 2 files changed, 9 deletions(-) diff --git a/apps/news/migrations/0013_auto_20190924_0806.py b/apps/news/migrations/0013_auto_20190924_0806.py index 7d6d0e1f..efd81652 100644 --- a/apps/news/migrations/0013_auto_20190924_0806.py +++ b/apps/news/migrations/0013_auto_20190924_0806.py @@ -12,11 +12,6 @@ class Migration(migrations.Migration): ] operations = [ - migrations.AddField( - model_name='news', - name='image', - field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='gallery.Image', verbose_name='News image'), - ), migrations.AddField( model_name='news', name='slug', diff --git a/apps/news/models.py b/apps/news/models.py index 5e7fbb9d..140c89c9 100644 --- a/apps/news/models.py +++ b/apps/news/models.py @@ -49,10 +49,6 @@ class NewsQuerySet(models.QuerySet): class News(BaseAttributes, TranslatedFieldsMixin): """News model.""" - image = models.ForeignKey( - 'gallery.Image', null=True, blank=True, default=None, - verbose_name=_('News image'), on_delete=models.CASCADE) - news_type = models.ForeignKey(NewsType, on_delete=models.PROTECT, verbose_name=_('news type')) title = TJSONField(blank=True, null=True, default=None,