Fix news duplicate creation (unique slugs)

This commit is contained in:
Dmitry Borzenin 2020-02-07 15:56:18 +03:00
parent 6645b590b8
commit 2fa6df0af8

View File

@ -24,6 +24,8 @@ from utils.models import (
TJSONField, TranslatedFieldsMixin, TypeDefaultImageMixin,
)
from utils.querysets import TranslationQuerysetMixin
from location.models import Country
from utils.parsers import NewsSlug
class Agenda(ProjectBaseMixin, TranslatedFieldsMixin):
@ -358,9 +360,28 @@ class News(GalleryMixin, BaseAttributes, TranslatedFieldsMixin, HasTagsMixin,
return f'news: {next(iter(self.slugs.values()))}'
def create_duplicate(self, new_country, view_count_model):
country_codes = list(Country.objects.all().values_list('code', flat=True))
all_slugs = {slug_value
for slug_dict in News.objects.all().values_list('slugs', flat=True)
for slug_value in slug_dict.values()}
new_slugs = {}
for locale, raw_slug in self.slugs.items():
slug = NewsSlug.parse(raw_slug, country_codes)
similar_slugs = sorted(x for x in all_slugs if NewsSlug.parse(x, country_codes).value == slug.value)
if len(similar_slugs) == 0:
new_slugs[locale] = NewsSlug(slug.value, new_country.code)
else:
last_slug = NewsSlug.parse(similar_slugs[-1], country_codes)
new_slug = NewsSlug(slug.value, new_country.code, last_slug.count)
if last_slug.locale is not None:
new_slug.count += 1
new_slugs[locale] = str(new_slug)
self.pk = None
self.state = self.UNPUBLISHED
self.slugs = {locale: f'{slug}-{new_country.code}' for locale, slug in self.slugs.items()}
self.slugs = new_slugs
self.country = new_country
self.views_count = view_count_model
self.duplication_date = timezone.now()