Merge branch 'develop' into feature/guides
This commit is contained in:
commit
5d69f2a5e7
|
|
@ -11,7 +11,7 @@ class SiteSettingsInline(admin.TabularInline):
|
||||||
@admin.register(models.SiteSettings)
|
@admin.register(models.SiteSettings)
|
||||||
class SiteSettingsAdmin(admin.ModelAdmin):
|
class SiteSettingsAdmin(admin.ModelAdmin):
|
||||||
"""Site settings admin conf."""
|
"""Site settings admin conf."""
|
||||||
inlines = [SiteSettingsInline,]
|
inlines = [SiteSettingsInline, ]
|
||||||
|
|
||||||
|
|
||||||
@admin.register(models.Feature)
|
@admin.register(models.Feature)
|
||||||
|
|
@ -54,3 +54,13 @@ class PageAdmin(admin.ModelAdmin):
|
||||||
list_display = ('id', '__str__', 'advertisement')
|
list_display = ('id', '__str__', 'advertisement')
|
||||||
list_filter = ('advertisement__url', 'source')
|
list_filter = ('advertisement__url', 'source')
|
||||||
date_hierarchy = 'created'
|
date_hierarchy = 'created'
|
||||||
|
|
||||||
|
|
||||||
|
@admin.register(models.Footer)
|
||||||
|
class FooterAdmin(admin.ModelAdmin):
|
||||||
|
"""Footer admin."""
|
||||||
|
|
||||||
|
|
||||||
|
@admin.register(models.FooterLink)
|
||||||
|
class FooterLinkAdmin(admin.ModelAdmin):
|
||||||
|
"""FooterLink admin."""
|
||||||
|
|
|
||||||
32
apps/main/migrations/0043_auto_20191217_1120.py
Normal file
32
apps/main/migrations/0043_auto_20191217_1120.py
Normal file
|
|
@ -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'),
|
||||||
|
),
|
||||||
|
]
|
||||||
17
apps/main/migrations/0044_auto_20191217_1125.py
Normal file
17
apps/main/migrations/0044_auto_20191217_1125.py
Normal file
|
|
@ -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',
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -354,6 +354,11 @@ class PageType(ProjectBaseMixin):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
|
class FooterLink(ProjectBaseMixin):
|
||||||
|
link = models.URLField(_('link'))
|
||||||
|
title = models.CharField(_('title'), max_length=255)
|
||||||
|
|
||||||
|
|
||||||
class Footer(ProjectBaseMixin):
|
class Footer(ProjectBaseMixin):
|
||||||
site = models.ForeignKey(
|
site = models.ForeignKey(
|
||||||
'main.SiteSettings', related_name='footers', verbose_name=_('footer'),
|
'main.SiteSettings', related_name='footers', verbose_name=_('footer'),
|
||||||
|
|
@ -361,6 +366,7 @@ class Footer(ProjectBaseMixin):
|
||||||
)
|
)
|
||||||
about_us = models.TextField(_('about_us'))
|
about_us = models.TextField(_('about_us'))
|
||||||
copyright = models.TextField(_('copyright'))
|
copyright = models.TextField(_('copyright'))
|
||||||
|
links = models.ManyToManyField(FooterLink, verbose_name=_('links'), related_name='link_footer')
|
||||||
|
|
||||||
|
|
||||||
class PanelQuerySet(models.QuerySet):
|
class PanelQuerySet(models.QuerySet):
|
||||||
|
|
|
||||||
|
|
@ -129,6 +129,9 @@ class NewsQuerySet(TranslationQuerysetMixin):
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def by_locale(self, locale):
|
||||||
|
return self.filter(title__icontains=locale)
|
||||||
|
|
||||||
|
|
||||||
class News(GalleryModelMixin, BaseAttributes, TranslatedFieldsMixin, HasTagsMixin,
|
class News(GalleryModelMixin, BaseAttributes, TranslatedFieldsMixin, HasTagsMixin,
|
||||||
FavoritesMixin):
|
FavoritesMixin):
|
||||||
|
|
@ -172,7 +175,7 @@ class News(GalleryModelMixin, BaseAttributes, TranslatedFieldsMixin, HasTagsMixi
|
||||||
verbose_name=_('title'),
|
verbose_name=_('title'),
|
||||||
help_text='{"en-GB":"some text"}')
|
help_text='{"en-GB":"some text"}')
|
||||||
backoffice_title = models.TextField(null=True, default=None,
|
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,
|
subtitle = TJSONField(blank=True, null=True, default=None,
|
||||||
verbose_name=_('subtitle'),
|
verbose_name=_('subtitle'),
|
||||||
help_text='{"en-GB":"some text"}')
|
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,
|
end = models.DateTimeField(blank=True, null=True, default=None,
|
||||||
verbose_name=_('End'))
|
verbose_name=_('End'))
|
||||||
slugs = HStoreField(null=True, blank=True, default=dict,
|
slugs = HStoreField(null=True, blank=True, default=dict,
|
||||||
verbose_name=_('Slugs for current news obj'),
|
verbose_name=_('Slugs for current news obj'),
|
||||||
help_text='{"en-GB":"some slug"}')
|
help_text='{"en-GB":"some slug"}')
|
||||||
state = models.PositiveSmallIntegerField(default=WAITING, choices=STATE_CHOICES,
|
state = models.PositiveSmallIntegerField(default=WAITING, choices=STATE_CHOICES,
|
||||||
verbose_name=_('State'))
|
verbose_name=_('State'))
|
||||||
is_highlighted = models.BooleanField(default=False,
|
is_highlighted = models.BooleanField(default=False,
|
||||||
|
|
@ -240,7 +243,6 @@ class News(GalleryModelMixin, BaseAttributes, TranslatedFieldsMixin, HasTagsMixi
|
||||||
self.duplication_date = timezone.now()
|
self.duplication_date = timezone.now()
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def duplicates(self):
|
def duplicates(self):
|
||||||
"""Duplicates for this news item excluding same country code labeled"""
|
"""Duplicates for this news item excluding same country code labeled"""
|
||||||
|
|
@ -330,7 +332,6 @@ class News(GalleryModelMixin, BaseAttributes, TranslatedFieldsMixin, HasTagsMixi
|
||||||
|
|
||||||
|
|
||||||
class NewsGallery(IntermediateGalleryModelMixin):
|
class NewsGallery(IntermediateGalleryModelMixin):
|
||||||
|
|
||||||
news = models.ForeignKey(News, null=True,
|
news = models.ForeignKey(News, null=True,
|
||||||
related_name='news_gallery',
|
related_name='news_gallery',
|
||||||
on_delete=models.CASCADE,
|
on_delete=models.CASCADE,
|
||||||
|
|
@ -344,4 +345,4 @@ class NewsGallery(IntermediateGalleryModelMixin):
|
||||||
"""NewsGallery meta class."""
|
"""NewsGallery meta class."""
|
||||||
verbose_name = _('news gallery')
|
verbose_name = _('news gallery')
|
||||||
verbose_name_plural = _('news galleries')
|
verbose_name_plural = _('news galleries')
|
||||||
unique_together = [['news', 'image'],]
|
unique_together = [['news', 'image'], ]
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
"""News app views."""
|
"""News app views."""
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
|
from django.utils import translation
|
||||||
from rest_framework import generics, permissions, response
|
from rest_framework import generics, permissions, response
|
||||||
|
|
||||||
from news import filters, models, serializers
|
from news import filters, models, serializers
|
||||||
|
|
@ -29,6 +30,11 @@ class NewsMixinView:
|
||||||
qs = qs.international_news()
|
qs = qs.international_news()
|
||||||
else:
|
else:
|
||||||
qs = qs.by_country_code(country_code)
|
qs = qs.by_country_code(country_code)
|
||||||
|
|
||||||
|
locale = kwargs.get('locale')
|
||||||
|
if locale:
|
||||||
|
qs = qs.by_locale(locale)
|
||||||
|
|
||||||
return qs
|
return qs
|
||||||
|
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
|
|
@ -43,7 +49,11 @@ class NewsListView(NewsMixinView, generics.ListAPIView):
|
||||||
filter_class = filters.NewsListFilterSet
|
filter_class = filters.NewsListFilterSet
|
||||||
|
|
||||||
def get_queryset(self, *args, **kwargs):
|
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)
|
return super().get_queryset(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -181,6 +191,6 @@ class NewsCarouselCreateDestroyView(CarouselCreateDestroyMixinView):
|
||||||
|
|
||||||
class NewsCloneView(generics.CreateAPIView):
|
class NewsCloneView(generics.CreateAPIView):
|
||||||
"""View for creating clone News"""
|
"""View for creating clone News"""
|
||||||
permission_classes = (permissions.AllowAny, )
|
permission_classes = (permissions.AllowAny,)
|
||||||
serializer_class = serializers.NewsCloneCreateSerializer
|
serializer_class = serializers.NewsCloneCreateSerializer
|
||||||
queryset = models.News.objects.all()
|
queryset = models.News.objects.all()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user