add counter for public_mark and change Guid serializer

This commit is contained in:
Dmitriy Kuzmenko 2019-12-25 15:19:43 +03:00
parent db5c879459
commit d7c7880860
8 changed files with 48 additions and 9 deletions

View File

@ -184,7 +184,7 @@ class GuideElementBaseSerializer(serializers.ModelSerializer):
city_name = serializers.CharField(source='city.name', allow_null=True)
product_detail = ProductGuideElementSerializer(read_only=True, source='product')
parent = RecursiveField(required=False)
children = RecursiveField(required=False, many=True, source='get_children')
class Meta:
"""Meta class."""
@ -200,6 +200,6 @@ class GuideElementBaseSerializer(serializers.ModelSerializer):
'city_name',
'section_name',
'wine_color_section_name',
'parent',
'children',
'label_photo',
]

View File

@ -116,5 +116,8 @@ class GuideElementListView(GuideElementBaseView,
def get_queryset(self):
"""Overridden get_queryset method."""
guide = get_object_or_404(models.Guide.objects.all(), pk=self.kwargs.get('pk'))
return models.GuideElement.objects.get_root_node(guide) \
.get_descendants()
node = models.GuideElement.objects.get_root_node(guide)
if node:
return node.get_children()
else:
return models.GuideElement.objects.none()

View File

@ -534,6 +534,9 @@ class Establishment(GalleryMixin, ProjectBaseMixin, URLImageMixin,
def delete(self, using=None, keep_parents=False):
"""Overridden delete method"""
# TODO: If this does not contradict the plan,
# it is better to change it.
# Just add CASCADE to Company and Note in establishment fk field.
# Delete all related companies
self.companies.all().delete()
# Delete all related notes
@ -553,6 +556,14 @@ class Establishment(GalleryMixin, ProjectBaseMixin, URLImageMixin,
"""Removes some tags from detail Establishment representation"""
return self.visible_tags.exclude(category__index_name__in=['tag'])
def recalculate_public_mark(self):
fresh_review = self.reviews.published().order_by('-modified').first()
if fresh_review:
self.public_mark = fresh_review.mark
else:
self.public_mark = None
self.save()
def recalculate_toque_number(self):
toque_number = 0
if self.address and self.public_mark:

View File

@ -43,3 +43,10 @@ def update_establishment_indices():
else:
qs = doc().get_indexing_queryset()
doc().update(qs)
@shared_task
def recalculation_public_mark(establishment_id):
establishment = models.Establishment.objects.get(id=establishment_id)
establishment.recalculate_public_mark()
establishment.recalculate_toque_number()

View File

@ -5,3 +5,6 @@ from django.utils.translation import gettext_lazy as _
class ReviewConfig(AppConfig):
name = 'review'
verbose_name = _('reviews')
def ready(self):
import review.signals

14
apps/review/signals.py Normal file
View File

@ -0,0 +1,14 @@
from django.db.models.signals import post_save
from django.dispatch import receiver
from review import models
from establishment import tasks
from establishment.models import Establishment
@receiver(post_save, sender=models.Review)
def create_order(sender, instance=None, created=False, **kwargs):
"""Recalculation public mark for establishment."""
if isinstance(instance.content_object, Establishment):
tasks.recalculation_public_mark.delay(
establishment_id=instance.content_object.id)

View File

@ -14,6 +14,7 @@ services:
- "5436:5432"
volumes:
- gm-db:/var/lib/postgresql/data/
- .:/code
elasticsearch:
image: elasticsearch:7.3.1

View File

@ -86,11 +86,11 @@ LOGGING = {
'py.warnings': {
'handlers': ['console'],
},
'django.db.backends': {
'handlers': ['console', ],
'level': 'DEBUG',
'propagate': False,
},
# 'django.db.backends': {
# 'handlers': ['console', ],
# 'level': 'DEBUG',
# 'propagate': False,
# },
}
}