add news author migration

This commit is contained in:
Dmitriy Kuzmenko 2019-12-03 09:59:11 +03:00
parent ed28ea1767
commit b6d0815ed0
5 changed files with 43 additions and 1 deletions

View File

@ -0,0 +1,29 @@
from django.core.management.base import BaseCommand
from django.db.models import F
from tqdm import tqdm
from account.models import User
from news.models import News
from transfer.models import PageTexts
class Command(BaseCommand):
help = 'Add author of News'
def handle(self, *args, **kwargs):
count = 0
news_list = News.objects.filter(created_by__isnull=True)
for news in tqdm(news_list, desc="Find author for exist news"):
old_news = PageTexts.objects.filter(id=news.old_id).annotate(
account_id=F('page__account_id'),
).first()
if old_news:
user = User.objects.filter(old_id=old_news.account_id).first()
if user:
news.created_by = user
news.modified_by = user
news.save()
count += 1
self.stdout.write(self.style.WARNING(f'Update {count} objects.'))

View File

@ -38,6 +38,7 @@ def transfer_news():
image=F('page__attachment_suffix_url'),
template=F('page__template'),
tags=GroupConcat('page__tags__id'),
account_id=F('page__account_id'),
)
serialized_data = NewsSerializer(data=list(queryset.values()), many=True)

View File

@ -7,10 +7,12 @@ from tag.models import Tag
from transfer.models import PageMetadata
from utils.legacy_parser import parse_legacy_news_content
from utils.slug_generator import generate_unique_slug
from account.models import User
class NewsSerializer(serializers.Serializer):
id = serializers.IntegerField()
account_id = serializers.IntegerField(allow_null=True)
tag_cat_id = serializers.IntegerField()
news_type_id = serializers.IntegerField()
news_title = serializers.CharField()
@ -39,6 +41,8 @@ class NewsSerializer(serializers.Serializer):
'state': self.get_state(validated_data),
'template': self.get_template(validated_data),
'country': self.get_country(validated_data),
'created_by': self.get_account(validated_data),
'modified_by': self.get_account(validated_data),
}
obj = News.objects.create(**payload)
@ -126,3 +130,8 @@ class NewsSerializer(serializers.Serializer):
else:
content = {data['locale']: data['title']}
return content
@staticmethod
def get_account(data):
"""Get account"""
return User.objects.filter(old_id=data['account_id']).first()

View File

@ -5,7 +5,7 @@ services:
mysql_db:
image: mysql:5.7
ports:
- "3306:3306"
- "3316:3306"
environment:
MYSQL_DATABASE: dev
MYSQL_USER: dev

View File

@ -99,3 +99,6 @@ TESTING = sys.argv[1:2] == ['test']
if TESTING:
ELASTICSEARCH_INDEX_NAMES = {}
ELASTICSEARCH_DSL_AUTOSYNC = False
# INSTALLED APPS
INSTALLED_APPS.append('transfer.apps.TransferConfig')