add transfer command, models and crud api.
This commit is contained in:
parent
e3d41ecd8d
commit
b03cd4fe09
38
apps/main/management/commands/add_panels.py
Normal file
38
apps/main/management/commands/add_panels.py
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
from django.core.management.base import BaseCommand
|
||||
from tqdm import tqdm
|
||||
|
||||
from account.models import User
|
||||
from main.models import Panel, SiteSettings
|
||||
from transfer.models import Panels
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = '''Add panels from legacy DB.'''
|
||||
|
||||
def handle(self, *args, **kwargs):
|
||||
objects = []
|
||||
deleted = 0
|
||||
panels_list = Panels.objects.filter(name__isnull=False)
|
||||
# remove existing panel
|
||||
exist_panel = Panel.objects.filter(old_id__isnull=False)
|
||||
if exist_panel.exists():
|
||||
deleted = exist_panel.count()
|
||||
exist_panel.delete()
|
||||
|
||||
for old_panel in tqdm(panels_list, desc='Add panels'):
|
||||
site = SiteSettings.objects.filter(old_id=old_panel.site_id).first()
|
||||
user = User.objects.filter(old_id=old_panel.site_id).first()
|
||||
if site:
|
||||
new_panel = Panel(
|
||||
old_id=old_panel.id,
|
||||
user=user,
|
||||
site=site,
|
||||
name=old_panel.name,
|
||||
display=old_panel.display,
|
||||
description=old_panel.description,
|
||||
query=old_panel.query,
|
||||
)
|
||||
objects.append(new_panel)
|
||||
Panel.objects.bulk_create(objects)
|
||||
self.stdout.write(
|
||||
self.style.WARNING(f'Created {len(objects)}/Deleted {deleted} footer objects.'))
|
||||
36
apps/main/migrations/0042_panel.py
Normal file
36
apps/main/migrations/0042_panel.py
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
# Generated by Django 2.2.7 on 2019-12-12 12:00
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('main', '0041_auto_20191211_0631'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Panel',
|
||||
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')),
|
||||
('name', models.CharField(max_length=255, verbose_name='name')),
|
||||
('display', models.CharField(blank=True, choices=[('table', 'table'), ('table', 'mailing')], default=None, max_length=255, null=True, verbose_name='display')),
|
||||
('description', models.CharField(blank=True, default=None, max_length=255, null=True, verbose_name='description')),
|
||||
('query', models.TextField(blank=True, default=None, null=True, verbose_name='query')),
|
||||
('old_id', models.IntegerField(blank=True, default=None, null=True, verbose_name='old id')),
|
||||
('site', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='main.SiteSettings', verbose_name='site')),
|
||||
('user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='user')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'panel',
|
||||
'verbose_name_plural': 'panels',
|
||||
},
|
||||
),
|
||||
]
|
||||
|
|
@ -361,3 +361,46 @@ class Footer(ProjectBaseMixin):
|
|||
)
|
||||
about_us = models.TextField(_('about_us'))
|
||||
copyright = models.TextField(_('copyright'))
|
||||
|
||||
|
||||
class PanelQuerySet(models.QuerySet):
|
||||
"""Panels QuerySet."""
|
||||
|
||||
|
||||
class Panel(ProjectBaseMixin):
|
||||
"""Custom panel model with stored SQL query."""
|
||||
TABLE = 'table'
|
||||
MAILING = 'table'
|
||||
|
||||
DISPLAY_CHOICES = (
|
||||
(TABLE, _('table')),
|
||||
(MAILING, _('mailing'))
|
||||
)
|
||||
name = models.CharField(_('name'), max_length=255)
|
||||
display = models.CharField(
|
||||
_('display'), max_length=255, choices=DISPLAY_CHOICES,
|
||||
blank=True, null=True, default=None
|
||||
)
|
||||
description = models.CharField(
|
||||
_('description'), max_length=255, blank=True, null=True, default=None)
|
||||
query = models.TextField(_('query'), blank=True, null=True, default=None)
|
||||
user = models.ForeignKey(
|
||||
'account.User', verbose_name=_('user'), null=True,
|
||||
on_delete=models.SET_NULL)
|
||||
site = models.ForeignKey(
|
||||
'main.SiteSettings', verbose_name=_('site'), null=True,
|
||||
on_delete=models.SET_NULL)
|
||||
old_id = models.IntegerField(
|
||||
_('old id'), null=True, blank=True, default=None)
|
||||
|
||||
objects = PanelQuerySet.as_manager()
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('panel')
|
||||
verbose_name_plural = _('panels')
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
def execute_query(self):
|
||||
pass
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@ from rest_framework import serializers
|
|||
from location.serializers import CountrySerializer
|
||||
from main import models
|
||||
from utils.serializers import ProjectModelSerializer, TranslatedField, RecursiveFieldSerializer
|
||||
from account.serializers.back import BackUserSerializer
|
||||
from account.models import User
|
||||
|
||||
|
||||
class FeatureSerializer(serializers.ModelSerializer):
|
||||
|
|
@ -265,8 +267,32 @@ class PageTypeBaseSerializer(serializers.ModelSerializer):
|
|||
|
||||
|
||||
class ContentTypeBackSerializer(serializers.ModelSerializer):
|
||||
"""Serializer fro model ContentType."""
|
||||
"""Serializer for model ContentType."""
|
||||
|
||||
class Meta:
|
||||
model = ContentType
|
||||
fields = '__all__'
|
||||
|
||||
|
||||
class PanelSerializer(serializers.ModelSerializer):
|
||||
"""Serializer for Custom panel."""
|
||||
user_id = serializers.PrimaryKeyRelatedField(
|
||||
queryset=User.objects.all(),
|
||||
source='user',
|
||||
write_only=True
|
||||
)
|
||||
user = BackUserSerializer(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = models.Panel
|
||||
fields = [
|
||||
'id',
|
||||
'name',
|
||||
'display',
|
||||
'description',
|
||||
'query',
|
||||
'created',
|
||||
'modified',
|
||||
'user',
|
||||
'user_id'
|
||||
]
|
||||
|
|
|
|||
|
|
@ -21,7 +21,11 @@ urlpatterns = [
|
|||
path('footer/', views.FooterBackView.as_view(), name='footer-list-create'),
|
||||
path('footer/<int:pk>/', views.FooterRUDBackView.as_view(), name='footer-rud'),
|
||||
path('page-types/', views.PageTypeListCreateView.as_view(),
|
||||
name='page-types-list-create')
|
||||
name='page-types-list-create'),
|
||||
path('panels/', views.PanelsListCreateView.as_view(), name='panels'),
|
||||
path('panels/<int:pk>/', views.PanelsListCreateView.as_view(), name='panels-rud'),
|
||||
# path('panels/<int:pk>/execute/', views.PanelsView.as_view(), name='panels-execute')
|
||||
|
||||
]
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ from rest_framework import generics, permissions
|
|||
|
||||
from main import serializers
|
||||
from main.filters import AwardFilter
|
||||
from main.models import Award, Footer, PageType
|
||||
from main.models import Award, Footer, PageType, Panel
|
||||
from main.views import SiteSettingsView, SiteListView
|
||||
|
||||
|
||||
|
|
@ -89,3 +89,21 @@ class PageTypeListCreateView(generics.ListCreateAPIView):
|
|||
pagination_class = None
|
||||
serializer_class = serializers.PageTypeBaseSerializer
|
||||
queryset = PageType.objects.all()
|
||||
|
||||
|
||||
class PanelsListCreateView(generics.ListCreateAPIView):
|
||||
"""Custom panels view."""
|
||||
permission_classes = (
|
||||
permissions.IsAdminUser,
|
||||
)
|
||||
serializer_class = serializers.PanelSerializer
|
||||
queryset = Panel.objects.all()
|
||||
|
||||
|
||||
class PanelsRUDView(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""Custom panels view."""
|
||||
permission_classes = (
|
||||
permissions.IsAdminUser,
|
||||
)
|
||||
serializer_class = serializers.PanelSerializer
|
||||
queryset = Panel.objects.all()
|
||||
19
apps/product/migrations/0021_auto_20191212_0926.py
Normal file
19
apps/product/migrations/0021_auto_20191212_0926.py
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Generated by Django 2.2.7 on 2019-12-12 09:26
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('product', '0020_merge_20191209_0911'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='product',
|
||||
name='product_type',
|
||||
field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='products', to='product.ProductType', verbose_name='Type'),
|
||||
),
|
||||
]
|
||||
|
|
@ -1222,3 +1222,20 @@ class Footers(MigrateMixin):
|
|||
class Meta:
|
||||
managed = False
|
||||
db_table = 'footers'
|
||||
|
||||
|
||||
class Panels(MigrateMixin):
|
||||
using = 'legacy'
|
||||
|
||||
name = models.CharField(max_length=255, blank=True, null=True)
|
||||
display = models.CharField(max_length=255, blank=True, null=True)
|
||||
description = models.CharField(max_length=255, blank=True, null=True)
|
||||
query = models.TextField(blank=True, null=True)
|
||||
created_at = models.DateTimeField(blank=True, null=True)
|
||||
updated_at = models.DateTimeField(blank=True, null=True)
|
||||
account_id = models.IntegerField(blank=True, null=True)
|
||||
site_id = models.IntegerField(blank=True, null=True)
|
||||
|
||||
class Meta:
|
||||
managed = False
|
||||
db_table = 'panels'
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import logging
|
|||
import random
|
||||
import re
|
||||
import string
|
||||
from collections import namedtuple
|
||||
|
||||
import requests
|
||||
from django.conf import settings
|
||||
|
|
@ -124,3 +125,10 @@ def absolute_url_decorator(func):
|
|||
def get_point_from_coordinates(latitude: str, longitude: str):
|
||||
if latitude and longitude:
|
||||
return Point(x=longitude, y=latitude, srid=4326)
|
||||
|
||||
|
||||
def namedtuplefetchall(cursor):
|
||||
"""Return all rows from a cursor as a namedtuple."""
|
||||
desc = cursor.description
|
||||
nt_result = namedtuple('Result', [col[0] for col in desc])
|
||||
return [nt_result(*row) for row in cursor.fetchall()]
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user