Add news serializer

This commit is contained in:
littlewolf 2019-10-20 17:59:18 +03:00
parent e1b031caf3
commit 8965cf0460
6 changed files with 120 additions and 26 deletions

View File

@ -0,0 +1,28 @@
from transfer.serializers.news import NewsSerializer
from transfer.models import PageTexts
from news.models import NewsType
from django.db.models import Value, IntegerField, F
from pprint import pprint
def transfer_news():
news_type, _ = NewsType.objects.get_or_create(name="News")
print(news_type)
#
queryset = PageTexts.objects.all().annotate(news_type=Value(news_type.id, output_field=IntegerField()))
queryset = queryset.annotate(attachment_file_name=F('page__attachment_file_name'))
queryset = queryset.annotate(template=F('page__template'))
pprint(vars(queryset.first()))
print("===================================================================================")
#
serialized_data = NewsSerializer(queryset, many=True)
# data = serialized_data.data
# pprint(serialized_data.data)
for serialized_obj in serialized_data.data:
pprint(serialized_obj)
break
data_types = {
"news": [transfer_news]
}

View File

@ -369,16 +369,16 @@ class GuideFilters(MigrateMixin):
managed = False
db_table = 'guide_filters'
class GuideSections(MigrateMixin):
using = 'legacy'
type = models.CharField(max_length=255)
key_name = models.CharField(max_length=255, blank=True, null=True)
value_name = models.CharField(max_length=255, blank=True, null=True)
right = models.IntegerField(blank=True, null=True)
created_at = models.DateTimeField()
updated_at = models.DateTimeField()
#
# class GuideSections(MigrateMixin):
# using = 'legacy'
#
# type = models.CharField(max_length=255)
# key_name = models.CharField(max_length=255, blank=True, null=True)
# value_name = models.CharField(max_length=255, blank=True, null=True)
# right = models.IntegerField(blank=True, null=True)
# created_at = models.DateTimeField()
# updated_at = models.DateTimeField()
# class GuideElements(MigrateMixin):

View File

View File

@ -0,0 +1,37 @@
from rest_framework import serializers
from news.models import News
class NewsSerializer(serializers.ModelSerializer):
image_url = serializers.SerializerMethodField()
preview_image_url = serializers.SerializerMethodField()
description = serializers.SerializerMethodField()
class Meta:
model = News
fields = (
"state",
"template",
"image_url",
"preview_image_url",
"title",
"description",
"slug",
"news_type"
)
def get_description(self, obj):
if not hasattr(obj, "body"):
return ""
else:
return obj.body
def get_image_url(self, obj):
if not hasattr(obj, "attachment_file_name") or obj.attachment_file_name is None:
return ""
return obj.attachment_file_name
def get_preview_image_url(self, obj):
if not hasattr(obj, "attachment_file_name") or obj.attachment_file_name is None:
return ""
return obj.attachment_file_name

View File

@ -1,3 +1,14 @@
from django.test import TestCase
# Create your tests here.
# from django.core.management import call_command
#
#
# class NewsTransferTestCase(TestCase):
# command = "-n"
#
# databases = {'default', 'legacy'}
#
# def test_transfer(self):
# args = [self.command]
# kwargs = {}
#
# call_command('transfer', *args, **kwargs)

View File

@ -7,27 +7,45 @@ from pprint import pprint
def transfer_objects(data_type):
models_list = {}
for app in apps.get_app_configs():
if exists(f"{app.path}/transfer.py"):
card_module = SourceFileLoader("transfer", f"{app.path}/transfer.py").load_module()
if not hasattr(card_module, "card") or len(card_module.card) < 1:
if exists(f"{app.path}/transfer_data.py"):
card_module = SourceFileLoader("transfer", f"{app.path}/transfer_data.py").load_module()
if not hasattr(card_module, "data_types") or not isinstance(card_module.data_types, dict) or len(card_module.data_types) < 1:
continue
for model, card in card_module.card.items():
if "data_type" in card and data_type == card["data_type"]:
card['app_label'] = app.label
models_list[model] = card
for module_data_type, transfer_funcs in card_module.data_types.items():
if data_type == module_data_type:
# card['app_label'] = app.label
# models_list[model] = card
for transfer_func in transfer_funcs:
print(f"========================== FUNCTION {transfer_func.__name__} ================================")
transfer_func()
# if len(models_list) < 1:
# print(f"Models with data type {data_type} not found in structure")
# exit(1)
# models_list = sort_by_dependencies(models_list)
#
# for model, card in models_list.items():
# transfer_data(model, card)
if len(models_list) < 1:
print(f"Models with data type {data_type} not found in structure")
exit(1)
models_list = sort_by_dependencies(models_list)
for model, card in models_list.items():
transfer_data(model, card)
# TRANSFER DATA FUNCTION