fixed similar establishments
This commit is contained in:
parent
0e643a1dfa
commit
90c9e321f7
|
|
@ -101,6 +101,22 @@ class EstablishmentQuerySet(models.QuerySet):
|
||||||
DistanceMeasure(Distance('address__coordinates', point, srid=4236)).m,
|
DistanceMeasure(Distance('address__coordinates', point, srid=4236)).m,
|
||||||
output_field=models.FloatField()))
|
output_field=models.FloatField()))
|
||||||
|
|
||||||
|
def annotate_intermediate_public_mark(self):
|
||||||
|
"""
|
||||||
|
Return QuerySet with annotated field - intermediate_public_mark.
|
||||||
|
Description:
|
||||||
|
If establishments in collection POP and its mark is null, then
|
||||||
|
intermediate_mark is set to 10;
|
||||||
|
"""
|
||||||
|
return self.annotate(intermediate_public_mark=models.Case(
|
||||||
|
models.When(
|
||||||
|
collections__collection_type=Collection.POP,
|
||||||
|
public_mark__isnull=True,
|
||||||
|
then=10
|
||||||
|
),
|
||||||
|
default='public_mark',
|
||||||
|
output_field=models.FloatField()))
|
||||||
|
|
||||||
def annotate_mark_similarity(self, mark):
|
def annotate_mark_similarity(self, mark):
|
||||||
"""
|
"""
|
||||||
Return a QuerySet with annotated field - mark_similarity
|
Return a QuerySet with annotated field - mark_similarity
|
||||||
|
|
@ -108,7 +124,7 @@ class EstablishmentQuerySet(models.QuerySet):
|
||||||
Similarity mark determined by comparison with compared establishment mark
|
Similarity mark determined by comparison with compared establishment mark
|
||||||
"""
|
"""
|
||||||
return self.annotate(mark_similarity=models.ExpressionWrapper(
|
return self.annotate(mark_similarity=models.ExpressionWrapper(
|
||||||
mark - models.F('mark'),
|
mark - models.F('intermediate_public_mark'),
|
||||||
output_field=models.FloatField()
|
output_field=models.FloatField()
|
||||||
))
|
))
|
||||||
|
|
||||||
|
|
@ -117,7 +133,8 @@ class EstablishmentQuerySet(models.QuerySet):
|
||||||
Return QuerySet with objects that similar to Establishment.
|
Return QuerySet with objects that similar to Establishment.
|
||||||
:param establishment_slug: str Establishment slug
|
:param establishment_slug: str Establishment slug
|
||||||
"""
|
"""
|
||||||
establishment_qs = Establishment.objects.filter(slug=establishment_slug)
|
establishment_qs = Establishment.objects.filter(slug=establishment_slug,
|
||||||
|
public_mark__isnull=False)
|
||||||
if establishment_qs.exists():
|
if establishment_qs.exists():
|
||||||
establishment = establishment_qs.first()
|
establishment = establishment_qs.first()
|
||||||
return self.exclude(slug=establishment_slug) \
|
return self.exclude(slug=establishment_slug) \
|
||||||
|
|
@ -127,11 +144,8 @@ class EstablishmentQuerySet(models.QuerySet):
|
||||||
reviews__status=Review.READY,
|
reviews__status=Review.READY,
|
||||||
public_mark__gte=10) \
|
public_mark__gte=10) \
|
||||||
.annotate_distance(point=establishment.address.coordinates) \
|
.annotate_distance(point=establishment.address.coordinates) \
|
||||||
.annotate_mark_similarity(establishment_qs.first().public_mark)
|
.annotate_intermediate_public_mark() \
|
||||||
# .annotate_distance_mark() \
|
.annotate_mark_similarity(mark=establishment.public_mark)
|
||||||
# .annotate_intermediate_public_mark() \
|
|
||||||
# .annotate_additional_mark(public_mark=establishment.public_mark) \
|
|
||||||
# .annotate_total_mark()
|
|
||||||
else:
|
else:
|
||||||
return self.none()
|
return self.none()
|
||||||
|
|
||||||
|
|
@ -225,7 +239,7 @@ class Establishment(ProjectBaseMixin, URLImageMixin, TranslatedFieldsMixin):
|
||||||
preview_image_url = models.URLField(verbose_name=_('Preview image URL path'),
|
preview_image_url = models.URLField(verbose_name=_('Preview image URL path'),
|
||||||
blank=True, null=True, default=None)
|
blank=True, null=True, default=None)
|
||||||
slug = models.SlugField(unique=True, max_length=50, null=True,
|
slug = models.SlugField(unique=True, max_length=50, null=True,
|
||||||
verbose_name=_('Establishment slug'), editable=True)
|
verbose_name=_('Establishment slug'), editable=True)
|
||||||
|
|
||||||
awards = generic.GenericRelation(to='main.Award')
|
awards = generic.GenericRelation(to='main.Award')
|
||||||
tags = generic.GenericRelation(to='main.MetaDataContent')
|
tags = generic.GenericRelation(to='main.MetaDataContent')
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,11 @@ class EstablishmentSimilarListView(EstablishmentListView):
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
"""Override get_queryset method"""
|
"""Override get_queryset method"""
|
||||||
return super().get_queryset().similar(establishment_slug=self.kwargs.get('slug'))\
|
number_objects = 12 # Count of similar objects
|
||||||
.order_by('-total_mark')[:13]
|
return super().get_queryset().similar(establishment_slug=self.kwargs.get('slug')) \
|
||||||
|
.order_by('distance')[:number_objects * 3] \
|
||||||
|
.order_by('mark_similarity')[:number_objects]
|
||||||
|
|
||||||
|
|
||||||
class EstablishmentRetrieveView(EstablishmentMixin, generics.RetrieveAPIView):
|
class EstablishmentRetrieveView(EstablishmentMixin, generics.RetrieveAPIView):
|
||||||
"""Resource for getting a establishment."""
|
"""Resource for getting a establishment."""
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user