diff --git a/apps/main/admin.py b/apps/main/admin.py index 315d1c2b..2fe5f1df 100644 --- a/apps/main/admin.py +++ b/apps/main/admin.py @@ -11,7 +11,7 @@ class SiteSettingsInline(admin.TabularInline): @admin.register(models.SiteSettings) class SiteSettingsAdmin(admin.ModelAdmin): """Site settings admin conf.""" - inlines = [SiteSettingsInline,] + inlines = [SiteSettingsInline, ] @admin.register(models.Feature) @@ -54,3 +54,13 @@ class PageAdmin(admin.ModelAdmin): list_display = ('id', '__str__', 'advertisement') list_filter = ('advertisement__url', 'source') date_hierarchy = 'created' + + +@admin.register(models.Footer) +class FooterAdmin(admin.ModelAdmin): + """Footer admin.""" + + +@admin.register(models.FooterLink) +class FooterLinkAdmin(admin.ModelAdmin): + """FooterLink admin.""" diff --git a/apps/main/migrations/0043_auto_20191217_1120.py b/apps/main/migrations/0043_auto_20191217_1120.py new file mode 100644 index 00000000..79bbf767 --- /dev/null +++ b/apps/main/migrations/0043_auto_20191217_1120.py @@ -0,0 +1,32 @@ +# Generated by Django 2.2.7 on 2019-12-17 11:20 + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0042_panel'), + ] + + operations = [ + migrations.CreateModel( + name='FooterLinks', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', models.DateTimeField(default=django.utils.timezone.now, editable=False, verbose_name='Date created')), + ('modified', models.DateTimeField(auto_now=True, verbose_name='Date updated')), + ('link', models.URLField(verbose_name='link')), + ('title', models.CharField(max_length=255, verbose_name='title')), + ], + options={ + 'abstract': False, + }, + ), + migrations.AddField( + model_name='footer', + name='links', + field=models.ManyToManyField(related_name='link_footer', to='main.FooterLinks', verbose_name='links'), + ), + ] diff --git a/apps/main/migrations/0044_auto_20191217_1125.py b/apps/main/migrations/0044_auto_20191217_1125.py new file mode 100644 index 00000000..90f51d51 --- /dev/null +++ b/apps/main/migrations/0044_auto_20191217_1125.py @@ -0,0 +1,17 @@ +# Generated by Django 2.2.7 on 2019-12-17 11:25 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0043_auto_20191217_1120'), + ] + + operations = [ + migrations.RenameModel( + old_name='FooterLinks', + new_name='FooterLink', + ), + ] diff --git a/apps/main/models.py b/apps/main/models.py index b39a6037..9b778834 100644 --- a/apps/main/models.py +++ b/apps/main/models.py @@ -354,6 +354,11 @@ class PageType(ProjectBaseMixin): return self.name +class FooterLink(ProjectBaseMixin): + link = models.URLField(_('link')) + title = models.CharField(_('title'), max_length=255) + + class Footer(ProjectBaseMixin): site = models.ForeignKey( 'main.SiteSettings', related_name='footers', verbose_name=_('footer'), @@ -361,6 +366,7 @@ class Footer(ProjectBaseMixin): ) about_us = models.TextField(_('about_us')) copyright = models.TextField(_('copyright')) + links = models.ManyToManyField(FooterLink, verbose_name=_('links'), related_name='link_footer') class PanelQuerySet(models.QuerySet): diff --git a/apps/news/models.py b/apps/news/models.py index 149b8480..19a27463 100644 --- a/apps/news/models.py +++ b/apps/news/models.py @@ -129,6 +129,9 @@ class NewsQuerySet(TranslationQuerysetMixin): ) ) + def by_locale(self, locale): + return self.filter(title__icontains=locale) + class News(GalleryModelMixin, BaseAttributes, TranslatedFieldsMixin, HasTagsMixin, FavoritesMixin): @@ -172,7 +175,7 @@ class News(GalleryModelMixin, BaseAttributes, TranslatedFieldsMixin, HasTagsMixi verbose_name=_('title'), help_text='{"en-GB":"some text"}') backoffice_title = models.TextField(null=True, default=None, - verbose_name=_('Title for searching via BO')) + verbose_name=_('Title for searching via BO')) subtitle = TJSONField(blank=True, null=True, default=None, verbose_name=_('subtitle'), help_text='{"en-GB":"some text"}') @@ -187,8 +190,8 @@ class News(GalleryModelMixin, BaseAttributes, TranslatedFieldsMixin, HasTagsMixi end = models.DateTimeField(blank=True, null=True, default=None, verbose_name=_('End')) slugs = HStoreField(null=True, blank=True, default=dict, - verbose_name=_('Slugs for current news obj'), - help_text='{"en-GB":"some slug"}') + verbose_name=_('Slugs for current news obj'), + help_text='{"en-GB":"some slug"}') state = models.PositiveSmallIntegerField(default=WAITING, choices=STATE_CHOICES, verbose_name=_('State')) is_highlighted = models.BooleanField(default=False, @@ -240,7 +243,6 @@ class News(GalleryModelMixin, BaseAttributes, TranslatedFieldsMixin, HasTagsMixi self.duplication_date = timezone.now() self.save() - @property def duplicates(self): """Duplicates for this news item excluding same country code labeled""" @@ -330,7 +332,6 @@ class News(GalleryModelMixin, BaseAttributes, TranslatedFieldsMixin, HasTagsMixi class NewsGallery(IntermediateGalleryModelMixin): - news = models.ForeignKey(News, null=True, related_name='news_gallery', on_delete=models.CASCADE, @@ -344,4 +345,4 @@ class NewsGallery(IntermediateGalleryModelMixin): """NewsGallery meta class.""" verbose_name = _('news gallery') verbose_name_plural = _('news galleries') - unique_together = [['news', 'image'],] + unique_together = [['news', 'image'], ] diff --git a/apps/news/views.py b/apps/news/views.py index fe9a75e7..c234c10a 100644 --- a/apps/news/views.py +++ b/apps/news/views.py @@ -1,6 +1,7 @@ """News app views.""" from django.conf import settings from django.shortcuts import get_object_or_404 +from django.utils import translation from rest_framework import generics, permissions, response from news import filters, models, serializers @@ -29,6 +30,11 @@ class NewsMixinView: qs = qs.international_news() else: qs = qs.by_country_code(country_code) + + locale = kwargs.get('locale') + if locale: + qs = qs.by_locale(locale) + return qs def get_object(self): @@ -43,7 +49,11 @@ class NewsListView(NewsMixinView, generics.ListAPIView): filter_class = filters.NewsListFilterSet def get_queryset(self, *args, **kwargs): - kwargs.update({'international_preferred': True}) + locale = translation.get_language() + kwargs.update({ + 'international_preferred': True, + 'locale': locale, + }) return super().get_queryset(*args, **kwargs) @@ -181,6 +191,6 @@ class NewsCarouselCreateDestroyView(CarouselCreateDestroyMixinView): class NewsCloneView(generics.CreateAPIView): """View for creating clone News""" - permission_classes = (permissions.AllowAny, ) + permission_classes = (permissions.AllowAny,) serializer_class = serializers.NewsCloneCreateSerializer queryset = models.News.objects.all()