fix news slug

This commit is contained in:
alex 2019-10-26 22:02:38 +03:00
parent 490fae3c00
commit 16f06ce2f1
4 changed files with 23 additions and 5 deletions

View File

@ -1,11 +1,12 @@
"""News app models.""" """News app models."""
from django.db import models
from django.contrib.contenttypes import fields as generic from django.contrib.contenttypes import fields as generic
from django.db import models
from django.utils import timezone from django.utils import timezone
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from rest_framework.reverse import reverse from rest_framework.reverse import reverse
from utils.models import BaseAttributes, TJSONField, TranslatedFieldsMixin, ProjectBaseMixin
from rating.models import Rating from rating.models import Rating
from utils.models import BaseAttributes, TJSONField, TranslatedFieldsMixin, ProjectBaseMixin
class NewsType(models.Model): class NewsType(models.Model):
@ -217,7 +218,6 @@ class NewsGalleryQuerySet(models.QuerySet):
class NewsGallery(models.Model): class NewsGallery(models.Model):
news = models.ForeignKey(News, null=True, news = models.ForeignKey(News, null=True,
related_name='news_gallery', related_name='news_gallery',
on_delete=models.CASCADE, on_delete=models.CASCADE,

View File

@ -2,10 +2,12 @@ from rest_framework import serializers
from news.models import News from news.models import News
from utils.legacy_parser import parse_legacy_news_content from utils.legacy_parser import parse_legacy_news_content
from utils.slug_generator import generate_unique_slug
class NewsSerializer(serializers.ModelSerializer): class NewsSerializer(serializers.ModelSerializer):
locale = serializers.CharField() locale = serializers.CharField()
slug = serializers.CharField()
body = serializers.CharField(allow_null=True) body = serializers.CharField(allow_null=True)
title = serializers.CharField() title = serializers.CharField()
template = serializers.CharField() template = serializers.CharField()
@ -27,6 +29,7 @@ class NewsSerializer(serializers.ModelSerializer):
def validate(self, data): def validate(self, data):
data.update({ data.update({
'slug': generate_unique_slug(News, data['slug']),
'state': self.get_state(data), 'state': self.get_state(data),
'template': self.get_template(data), 'template': self.get_template(data),
'title': self.get_title(data), 'title': self.get_title(data),

View File

@ -1,6 +1,6 @@
from rest_framework import serializers from rest_framework import serializers
from recipe.models import Recipe from recipe.models import Recipe
from utils.legacy_parser import parse_legacy_content from utils.legacy_parser import parse_legacy_news_content
class RecipeSerializer(serializers.ModelSerializer): class RecipeSerializer(serializers.ModelSerializer):
@ -51,5 +51,5 @@ class RecipeSerializer(serializers.ModelSerializer):
# return {"en-GB": desc} # return {"en-GB": desc}
content = None content = None
if obj['body']: if obj['body']:
content = parse_legacy_content(obj['body']) content = parse_legacy_news_content(obj['body'])
return {obj['locale']: content} return {obj['locale']: content}

View File

@ -0,0 +1,15 @@
from django.utils.text import slugify
def generate_unique_slug(klass, text):
"""
return unique slug if origin slug is exist.
eg: `foo-bar` => `foo-bar-1`
"""
origin_slug = slugify(text)
unique_slug = origin_slug
numb = 1
while klass.objects.filter(slug=unique_slug).exists():
unique_slug = f'{origin_slug}-{numb}'
numb += 1
return unique_slug