add footer migrations and api

This commit is contained in:
Dmitriy Kuzmenko 2019-12-09 17:47:37 +03:00
parent 3e0fad2139
commit 6af7a7da5b
8 changed files with 134 additions and 1 deletions

View File

@ -0,0 +1,32 @@
from django.core.management.base import BaseCommand
from tqdm import tqdm
from main.models import SiteSettings, Footer
from transfer.models import Footers
class Command(BaseCommand):
help = '''Add footers from legacy DB.'''
def handle(self, *args, **kwargs):
objects = []
deleted = 0
footers_list = Footers.objects.all()
for old_footer in tqdm(footers_list, desc='Add footers'):
site = SiteSettings.objects.filter(old_id=old_footer.site_id).first()
if site:
if site.footers.exists():
site.footers.all().delete()
deleted += 1
footer = Footer(
site=site,
about_us=old_footer.about_us,
copyright=old_footer.copyright,
created=old_footer.created_at,
modified=old_footer.updated_at
)
objects.append(footer)
Footer.objects.bulk_create(objects)
self.stdout.write(
self.style.WARNING(f'Created {len(objects)}/Deleted {deleted} footer objects.'))

View File

@ -0,0 +1,29 @@
# Generated by Django 2.2.7 on 2019-12-09 13:21
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('main', '0039_sitefeature_old_id'),
]
operations = [
migrations.CreateModel(
name='Footer',
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')),
('about_us', models.TextField(verbose_name='about_us')),
('copyright', models.TextField(verbose_name='copyright')),
('site', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='footers', to='main.SiteSettings', verbose_name='footer')),
],
options={
'abstract': False,
},
),
]

View File

@ -351,3 +351,12 @@ class PageType(ProjectBaseMixin):
def __str__(self): def __str__(self):
"""Overridden dunder method.""" """Overridden dunder method."""
return self.name return self.name
class Footer(ProjectBaseMixin):
site = models.ForeignKey(
'main.SiteSettings', related_name='footers', verbose_name=_('footer'),
on_delete=models.PROTECT
)
about_us = models.TextField(_('about_us'))
copyright = models.TextField(_('copyright'))

View File

@ -22,6 +22,7 @@ class FeatureSerializer(serializers.ModelSerializer):
'site_settings', 'site_settings',
) )
class CurrencySerializer(ProjectModelSerializer): class CurrencySerializer(ProjectModelSerializer):
"""Currency serializer.""" """Currency serializer."""
@ -36,6 +37,33 @@ class CurrencySerializer(ProjectModelSerializer):
] ]
class FooterSerializer(serializers.ModelSerializer):
"""Footer serializer."""
class Meta:
model = models.Footer
fields = [
'id',
'about_us',
'copyright',
'created',
'modified',
]
class FooterBackSerializer(FooterSerializer):
site_id = serializers.PrimaryKeyRelatedField(
queryset=models.SiteSettings.objects.all(),
source='site'
)
class Meta:
model = models.Footer
fields = FooterSerializer.Meta.fields + [
'site_id'
]
class SiteFeatureSerializer(serializers.ModelSerializer): class SiteFeatureSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(source='feature.id') id = serializers.IntegerField(source='feature.id')
slug = serializers.CharField(source='feature.slug') slug = serializers.CharField(source='feature.slug')
@ -68,6 +96,7 @@ class SiteSettingsSerializer(serializers.ModelSerializer):
country_name = serializers.CharField(source='country.name_translated', read_only=True) country_name = serializers.CharField(source='country.name_translated', read_only=True)
time_format = serializers.CharField(source='country.time_format', read_only=True) time_format = serializers.CharField(source='country.time_format', read_only=True)
footers = FooterSerializer(many=True, read_only=True)
class Meta: class Meta:
"""Meta class.""" """Meta class."""
@ -87,6 +116,7 @@ class SiteSettingsSerializer(serializers.ModelSerializer):
'published_features', 'published_features',
'currency', 'currency',
'country_name', 'country_name',
'footers',
] ]

View File

@ -18,6 +18,8 @@ urlpatterns = [
name='site-feature-list-create'), name='site-feature-list-create'),
path('site-feature/<int:id>/', views.SiteFeatureRUDBackView.as_view(), path('site-feature/<int:id>/', views.SiteFeatureRUDBackView.as_view(),
name='site-feature-rud'), name='site-feature-rud'),
path('footer/', views.FooterBackView.as_view(), name='footer-list-create'),
path('footer/<int:pk>/', views.FooterRUDBackView.as_view(), name='footer-rud'),
] ]

View File

@ -4,7 +4,7 @@ from rest_framework import generics, permissions
from main import serializers from main import serializers
from main.filters import AwardFilter from main.filters import AwardFilter
from main.models import Award from main.models import Award, Footer
from main.views import SiteSettingsView, SiteListView from main.views import SiteSettingsView, SiteListView
@ -67,3 +67,17 @@ class SiteSettingsBackOfficeView(SiteSettingsView):
class SiteListBackOfficeView(SiteListView): class SiteListBackOfficeView(SiteListView):
"""Site settings View.""" """Site settings View."""
serializer_class = serializers.SiteSerializer serializer_class = serializers.SiteSerializer
class FooterBackView(generics.ListCreateAPIView):
"""Footer back list/create view."""
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
serializer_class = serializers.FooterBackSerializer
queryset = Footer.objects.all()
class FooterRUDBackView(generics.RetrieveUpdateDestroyAPIView):
"""Footer back RUD view."""
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
serializer_class = serializers.FooterBackSerializer
queryset = Footer.objects.all()

View File

@ -1208,3 +1208,17 @@ class NewsletterSubscriber(MigrateMixin):
class Meta: class Meta:
managed = False managed = False
db_table = 'newsletter_subscriptions' db_table = 'newsletter_subscriptions'
class Footers(MigrateMixin):
using = 'legacy'
about_us = models.TextField(blank=True, null=True)
copyright = models.TextField(blank=True, null=True)
site = models.ForeignKey('Sites', models.DO_NOTHING, blank=True, null=True)
created_at = models.DateTimeField()
updated_at = models.DateTimeField()
class Meta:
managed = False
db_table = 'footers'

View File

@ -8,9 +8,12 @@
./manage.py transfer --fill_city_gallery ./manage.py transfer --fill_city_gallery
./manage.py transfer -l ./manage.py transfer -l
./manage.py transfer --product ./manage.py transfer --product
# Утеряна четкая связь между последовательностью миграций для импорта тегов продуктов,
# что может привести к удалению уже импортированных тегов командой выше.
./manage.py transfer --souvenir ./manage.py transfer --souvenir
./manage.py transfer --establishment_note ./manage.py transfer --establishment_note
./manage.py transfer --product_note ./manage.py transfer --product_note
./manage.py transfer --check_serial_number
./manage.py transfer --wine_characteristics ./manage.py transfer --wine_characteristics
./manage.py transfer --inquiries ./manage.py transfer --inquiries
./manage.py transfer --assemblage ./manage.py transfer --assemblage