diff --git a/apps/news/management/commands/add_author.py b/apps/news/management/commands/add_author.py new file mode 100644 index 00000000..0313d7b6 --- /dev/null +++ b/apps/news/management/commands/add_author.py @@ -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.')) diff --git a/apps/news/transfer_data.py b/apps/news/transfer_data.py index bc0d3711..33aeedfd 100644 --- a/apps/news/transfer_data.py +++ b/apps/news/transfer_data.py @@ -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) diff --git a/apps/transfer/serializers/news.py b/apps/transfer/serializers/news.py index 4dc7d913..4ef03184 100644 --- a/apps/transfer/serializers/news.py +++ b/apps/transfer/serializers/news.py @@ -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() diff --git a/docker-compose.mysql.yml b/docker-compose.mysql.yml index bd81ecb2..a8900226 100644 --- a/docker-compose.mysql.yml +++ b/docker-compose.mysql.yml @@ -5,7 +5,7 @@ services: mysql_db: image: mysql:5.7 ports: - - "3306:3306" + - "3316:3306" environment: MYSQL_DATABASE: dev MYSQL_USER: dev diff --git a/project/settings/local.py b/project/settings/local.py index c8974c40..6a592a46 100644 --- a/project/settings/local.py +++ b/project/settings/local.py @@ -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') \ No newline at end of file