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

View File

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

View File

@ -1,6 +1,6 @@
from rest_framework import serializers
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):
@ -51,5 +51,5 @@ class RecipeSerializer(serializers.ModelSerializer):
# return {"en-GB": desc}
content = None
if obj['body']:
content = parse_legacy_content(obj['body'])
content = parse_legacy_news_content(obj['body'])
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