add footer migrations and api
This commit is contained in:
parent
3e0fad2139
commit
6af7a7da5b
32
apps/main/management/commands/add_footers.py
Normal file
32
apps/main/management/commands/add_footers.py
Normal 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.'))
|
||||
29
apps/main/migrations/0040_footer.py
Normal file
29
apps/main/migrations/0040_footer.py
Normal 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,
|
||||
},
|
||||
),
|
||||
]
|
||||
|
|
@ -351,3 +351,12 @@ class PageType(ProjectBaseMixin):
|
|||
def __str__(self):
|
||||
"""Overridden dunder method."""
|
||||
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'))
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ class FeatureSerializer(serializers.ModelSerializer):
|
|||
'site_settings',
|
||||
)
|
||||
|
||||
|
||||
class CurrencySerializer(ProjectModelSerializer):
|
||||
"""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):
|
||||
id = serializers.IntegerField(source='feature.id')
|
||||
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)
|
||||
time_format = serializers.CharField(source='country.time_format', read_only=True)
|
||||
footers = FooterSerializer(many=True, read_only=True)
|
||||
|
||||
class Meta:
|
||||
"""Meta class."""
|
||||
|
|
@ -87,6 +116,7 @@ class SiteSettingsSerializer(serializers.ModelSerializer):
|
|||
'published_features',
|
||||
'currency',
|
||||
'country_name',
|
||||
'footers',
|
||||
]
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -18,6 +18,8 @@ urlpatterns = [
|
|||
name='site-feature-list-create'),
|
||||
path('site-feature/<int:id>/', views.SiteFeatureRUDBackView.as_view(),
|
||||
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'),
|
||||
]
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ from rest_framework import generics, permissions
|
|||
|
||||
from main import serializers
|
||||
from main.filters import AwardFilter
|
||||
from main.models import Award
|
||||
from main.models import Award, Footer
|
||||
from main.views import SiteSettingsView, SiteListView
|
||||
|
||||
|
||||
|
|
@ -67,3 +67,17 @@ class SiteSettingsBackOfficeView(SiteSettingsView):
|
|||
class SiteListBackOfficeView(SiteListView):
|
||||
"""Site settings View."""
|
||||
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()
|
||||
|
|
|
|||
|
|
@ -1208,3 +1208,17 @@ class NewsletterSubscriber(MigrateMixin):
|
|||
class Meta:
|
||||
managed = False
|
||||
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'
|
||||
|
|
|
|||
|
|
@ -8,9 +8,12 @@
|
|||
./manage.py transfer --fill_city_gallery
|
||||
./manage.py transfer -l
|
||||
./manage.py transfer --product
|
||||
# Утеряна четкая связь между последовательностью миграций для импорта тегов продуктов,
|
||||
# что может привести к удалению уже импортированных тегов командой выше.
|
||||
./manage.py transfer --souvenir
|
||||
./manage.py transfer --establishment_note
|
||||
./manage.py transfer --product_note
|
||||
./manage.py transfer --check_serial_number
|
||||
./manage.py transfer --wine_characteristics
|
||||
./manage.py transfer --inquiries
|
||||
./manage.py transfer --assemblage
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user