fix recipe duplicates

This commit is contained in:
alex 2019-12-17 11:54:50 +03:00
parent 959eb33043
commit 6a987532ba
6 changed files with 46 additions and 4 deletions

View File

@ -25,6 +25,9 @@ class RecipeQuerySet(models.QuerySet):
default=False,
output_field=models.BooleanField(default=False)))
def by_locale(self, locale):
return self.filter(title__icontains=locale)
class Recipe(TranslatedFieldsMixin, ImageMixin, BaseAttributes):
"""Recipe model."""

View File

@ -14,8 +14,15 @@ class RecipeListSerializer(serializers.ModelSerializer):
"""Meta class."""
model = models.Recipe
fields = ('id', 'title_translated', 'subtitle_translated', 'author',
'published_at', 'in_favorites')
fields = (
'id',
'title_translated',
'subtitle_translated',
'author',
'created_by',
'published_at',
'in_favorites',
)
read_only_fields = fields

View File

@ -1,5 +1,8 @@
from pprint import pprint
from django.db.models import Count
from recipe.models import Recipe
from transfer.models import PageTexts
from transfer.serializers.recipe import RecipeSerializer
@ -25,6 +28,20 @@ def transfer_recipe():
serialized_data.save()
else:
pprint(f'Recipe serializer errors: {serialized_data.errors}')
return
# Удаление дубликатов рецептов по одинаковым description
duplicate_descriptions = Recipe.objects.values(
'description'
).annotate(
description_count=Count('description')
).filter(
description_count__gt=1
)
for data in duplicate_descriptions:
description = data['description']
_list = list(Recipe.objects.filter(description=description).values_list('pk', flat=True)[1:])
Recipe.objects.filter(id__in=_list).delete()
data_types = {

View File

@ -1,5 +1,7 @@
"""Recipe app common views."""
from django.utils import translation
from rest_framework import generics, permissions
from recipe import models
from recipe.serializers import common as serializers
@ -10,9 +12,14 @@ class RecipeViewMixin(generics.GenericAPIView):
pagination_class = None
permission_classes = (permissions.AllowAny,)
def get_queryset(self):
def get_queryset(self, *args, **kwargs):
user = self.request.user
qs = models.Recipe.objects.published().annotate_in_favorites(user)
locale = kwargs.get('locale')
if locale:
qs = qs.by_locale(locale)
return qs
@ -21,6 +28,11 @@ class RecipeListView(RecipeViewMixin, generics.ListAPIView):
serializer_class = serializers.RecipeListSerializer
def get_queryset(self, *args, **kwargs):
locale = translation.get_language()
kwargs.update({'locale': locale})
return super().get_queryset(*args, **kwargs)
class RecipeDetailView(RecipeViewMixin, generics.RetrieveAPIView):
"""Resource for detailed recipe information."""

View File

@ -127,8 +127,10 @@ def transfer_product_reviews():
data_types = {
"languages": [
transfer_languages,
],
"overlook": [
# transfer_languages,
transfer_reviews,
transfer_text_review,
make_en_text_review,

View File

@ -49,6 +49,7 @@ class Command(BaseCommand):
'guide_elements_bulk',
'guide_element_advertorials',
'guide_complete',
'languages', # №4 - перенос языков
]
def handle(self, *args, **options):