remove dist points

dev
timofejmalinin 2 years ago
parent d9c20d3b8e
commit 420c8334e6

@ -1 +1,112 @@
[{"model": "service.post_and_pvzgroup", "pk": 7, "fields": {"name": "Ozon", "category": 1, "image": "post_and_pvz_group_images/nameozon_typePVZ_SizeM.png", "visible": true, "include_in_ml": true}}, {"model": "service.post_and_pvzgroup", "pk": 8, "fields": {"name": "СДЭК", "category": 1, "image": "post_and_pvz_group_images/namesdek_typePVZ_SizeM.png", "visible": true, "include_in_ml": true}}, {"model": "service.post_and_pvzgroup", "pk": 9, "fields": {"name": "Халва", "category": 2, "image": "post_and_pvz_group_images/namekhalva_typepostamat_SizeM.png", "visible": true, "include_in_ml": false}}, {"model": "service.post_and_pvzgroup", "pk": 10, "fields": {"name": "СДЭК", "category": 2, "image": "post_and_pvz_group_images/namesdek_typepostamat_SizeM.png", "visible": true, "include_in_ml": false}}, {"model": "service.post_and_pvzgroup", "pk": 12, "fields": {"name": "Ozon", "category": 2, "image": "post_and_pvz_group_images/nameozon_typepostamat_SizeM.png", "visible": true, "include_in_ml": false}}, {"model": "service.post_and_pvzgroup", "pk": 17, "fields": {"name": "WildBerries", "category": 1, "image": "post_and_pvz_group_images/namewb_typePVZ_SizeM.png", "visible": true, "include_in_ml": false}}, {"model": "service.post_and_pvzgroup", "pk": 19, "fields": {"name": "Яндекс.Маркет", "category": 1, "image": "post_and_pvz_group_images/ya.market-PVZ-M_KWksDvo.png", "visible": true, "include_in_ml": true}}, {"model": "service.post_and_pvzgroup", "pk": 20, "fields": {"name": "Яндекс.Маркет", "category": 2, "image": "post_and_pvz_group_images/ya.market-postamat-M.png", "visible": true, "include_in_ml": true}}, {"model": "service.post_and_pvzgroup", "pk": 24, "fields": {"name": "Почта России", "category": 1, "image": "post_and_pvz_group_images/pochta-PVZ-M.png", "visible": true, "include_in_ml": true}}, {"model": "service.post_and_pvzgroup", "pk": 25, "fields": {"name": "Почта России", "category": 2, "image": "post_and_pvz_group_images/pochta-postamat-M_gBJlHTO.png", "visible": true, "include_in_ml": true}}] [
{
"model":"service.post_and_pvzgroup",
"pk":7,
"fields":{
"name":"Ozon",
"category":1,
"image":"post_and_pvz_group_images/nameozon_typePVZ_SizeM.png",
"visible":true,
"include_in_ml":true
}
},
{
"model":"service.post_and_pvzgroup",
"pk":8,
"fields":{
"name":"СДЭК",
"category":1,
"image":"post_and_pvz_group_images/namesdek_typePVZ_SizeM.png",
"visible":true,
"include_in_ml":true
}
},
{
"model":"service.post_and_pvzgroup",
"pk":9,
"fields":{
"name":"Халва",
"category":2,
"image":"post_and_pvz_group_images/namekhalva_typepostamat_SizeM.png",
"visible":true,
"include_in_ml":false
}
},
{
"model":"service.post_and_pvzgroup",
"pk":10,
"fields":{
"name":"СДЭК",
"category":2,
"image":"post_and_pvz_group_images/namesdek_typepostamat_SizeM.png",
"visible":true,
"include_in_ml":false
}
},
{
"model":"service.post_and_pvzgroup",
"pk":12,
"fields":{
"name":"Ozon",
"category":2,
"image":"post_and_pvz_group_images/nameozon_typepostamat_SizeM.png",
"visible":true,
"include_in_ml":false
}
},
{
"model":"service.post_and_pvzgroup",
"pk":17,
"fields":{
"name":"WildBerries",
"category":1,
"image":"post_and_pvz_group_images/namewb_typePVZ_SizeM.png",
"visible":true,
"include_in_ml":false
}
},
{
"model":"service.post_and_pvzgroup",
"pk":19,
"fields":{
"name":"Яндекс.Маркет",
"category":1,
"image":"post_and_pvz_group_images/ya.market-PVZ-M_KWksDvo.png",
"visible":true,
"include_in_ml":true
}
},
{
"model":"service.post_and_pvzgroup",
"pk":20,
"fields":{
"name":"Яндекс.Маркет",
"category":2,
"image":"post_and_pvz_group_images/ya.market-postamat-M.png",
"visible":true,
"include_in_ml":true
}
},
{
"model":"service.post_and_pvzgroup",
"pk":24,
"fields":{
"name":"Почта России",
"category":1,
"image":"post_and_pvz_group_images/pochta-PVZ-M.png",
"visible":true,
"include_in_ml":true
}
},
{
"model":"service.post_and_pvzgroup",
"pk":25,
"fields":{
"name":"Почта России",
"category":2,
"image":"post_and_pvz_group_images/pochta-postamat-M_gBJlHTO.png",
"visible":true,
"include_in_ml":true
}
}
]

@ -9,6 +9,7 @@ https://docs.djangoproject.com/en/3.2/topics/settings/
For the full list of settings and their values, see For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.2/ref/settings/ https://docs.djangoproject.com/en/3.2/ref/settings/
""" """
import json
import os import os
from pathlib import Path from pathlib import Path
@ -197,3 +198,6 @@ JSON_EXPORT_FILENAME = 'placement_points.json'
DATA_UPLOAD_MAX_NUMBER_FIELDS = None DATA_UPLOAD_MAX_NUMBER_FIELDS = None
GEOCODER_API_KEY = os.getenv('GEOCODER_API_KEY','TzgdKWgyI2nfaz1WHRD-aYJK4e400MiOJQP7Enf1e1M') GEOCODER_API_KEY = os.getenv('GEOCODER_API_KEY','TzgdKWgyI2nfaz1WHRD-aYJK4e400MiOJQP7Enf1e1M')
STATUS_TASK_NAME='status_task' STATUS_TASK_NAME='status_task'
MAPPING_POST_PVZ_GROUP = json.loads(open(os.path.join(BASE_DIR, 'fixtures', 'post_pvz_groups.json')).read())
GROUP_IDS = [group['pk'] for group in MAPPING_POST_PVZ_GROUP]

@ -11,9 +11,7 @@ from service.models import AO
from service.models import PlacementPoint from service.models import PlacementPoint
from service.models import Rayon from service.models import Rayon
from service.models import PrePlacementPoint, Post_and_pvz, Post_and_pvzCategory, Post_and_pvzGroup, OtherObjects, \ from service.models import PrePlacementPoint, Post_and_pvz, Post_and_pvzCategory, Post_and_pvzGroup, OtherObjects, \
OtherObjectsGroup, \ OtherObjectsGroup, OtherObjectsCategory, TempFiles, RaschetGroups, House, TaskStatus
OtherObjectsCategory, PrePlacementPointPVZDistance, TempFiles, RaschetGroups, House
from service.models import PlacementPointPVZDistance, TaskStatus
from postamates.settings import DEBUG from postamates.settings import DEBUG
from django.core.cache import cache from django.core.cache import cache
from service.utils import run_psql_command from service.utils import run_psql_command
@ -32,7 +30,6 @@ if DEBUG:
my_admin_site.register(AO) my_admin_site.register(AO)
my_admin_site.register(Rayon) my_admin_site.register(Rayon)
my_admin_site.register(TempFiles) my_admin_site.register(TempFiles)
my_admin_site.register(PlacementPointPVZDistance)
class Post_and_PVZAdmin(admin.ModelAdmin): class Post_and_PVZAdmin(admin.ModelAdmin):
@ -46,7 +43,6 @@ my_admin_site.register(Post_and_pvz, Post_and_PVZAdmin)
my_admin_site.register(OtherObjects) my_admin_site.register(OtherObjects)
my_admin_site.register(House) my_admin_site.register(House)
my_admin_site.register(PrePlacementPoint) my_admin_site.register(PrePlacementPoint)
my_admin_site.register(PrePlacementPointPVZDistance)
class TaskStatusAdmin(admin.ModelAdmin): class TaskStatusAdmin(admin.ModelAdmin):

@ -115,6 +115,19 @@ class AbstractPlacementPoint(models.Model):
business_activity_shap = models.IntegerField(null=True, blank=True) business_activity_shap = models.IntegerField(null=True, blank=True)
# group_distances
d7 = models.FloatField(null=True, blank=True, verbose_name='Расстояние до ПВЗ Ozon')
d8 = models.FloatField(null=True, blank=True, verbose_name='Расстояние до ПВЗ СДЭК')
d9 = models.FloatField(null=True, blank=True, verbose_name='Расстояние до Постамата Халва')
d10 = models.FloatField(null=True, blank=True, verbose_name='Расстояние до Постамата СДЭК')
d12 = models.FloatField(null=True, blank=True, verbose_name='Расстояние до Постамата Ozon')
d17 = models.FloatField(null=True, verbose_name='Расстояние до ПВЗ Wildberries')
d19 = models.FloatField(null=True, blank=True, verbose_name='Расстояние до ПВЗ Yandex')
d20 = models.FloatField(null=True, blank=True, verbose_name='Расстояние до Постамата Yandex')
d24 = models.FloatField(null=True, blank=True, verbose_name='Расстояние до ПВЗ Почта России')
d25 = models.FloatField(null=True, blank=True, verbose_name='Расстояние до Постамата Почта России')
class PlacementPoint(AbstractPlacementPoint): class PlacementPoint(AbstractPlacementPoint):
class Meta: class Meta:
verbose_name = 'Точка' verbose_name = 'Точка'
@ -189,8 +202,6 @@ class Post_and_pvzCategory(models.Model):
return self.name return self.name
name = models.TextField(null=False, blank=False, verbose_name='Название слоя') name = models.TextField(null=False, blank=False, verbose_name='Название слоя')
image = models.ImageField(blank=True, null=True, default=None, upload_to='post_and_pvz_category_images/',
verbose_name='Картинка')
visible = models.BooleanField(default=True) visible = models.BooleanField(default=True)
include_in_ml = models.BooleanField(default=True) include_in_ml = models.BooleanField(default=True)
@ -220,8 +231,6 @@ class OtherObjectsCategory(models.Model):
return self.name return self.name
name = models.TextField(null=False, blank=False, verbose_name='Название слоя') name = models.TextField(null=False, blank=False, verbose_name='Название слоя')
image = models.ImageField(blank=True, null=True, default=None, upload_to='other_objects_category_images/',
verbose_name='Картинка')
visible = models.BooleanField(default=True) visible = models.BooleanField(default=True)
@ -240,16 +249,18 @@ class OtherObjectsGroup(models.Model):
visible = models.BooleanField(default=True) visible = models.BooleanField(default=True)
class PlacementPointPVZDistance(models.Model): # class PlacementPointPVZDistance(models.Model):
placement_point = models.ForeignKey('PlacementPoint', default=None, on_delete=models.CASCADE) # pass
pvz_postamates_group = models.ForeignKey('Post_and_pvzGroup', default=None, on_delete=models.CASCADE) # placement_point = models.ForeignKey('PlacementPoint', default=None, on_delete=models.CASCADE)
dist = models.FloatField(blank=True, null=True, default=None) # pvz_postamates_group = models.ForeignKey('Post_and_pvzGroup', default=None, on_delete=models.CASCADE)
# dist = models.FloatField(blank=True, null=True, default=None)
#
class PrePlacementPointPVZDistance(models.Model): #
placement_point = models.ForeignKey('PrePlacementPoint', default=None, on_delete=models.CASCADE) # class PrePlacementPointPVZDistance(models.Model):
pvz_postamates_group = models.ForeignKey('Post_and_pvzGroup', default=None, on_delete=models.CASCADE) # pass
dist = models.FloatField(blank=True, null=True, default=None) # placement_point = models.ForeignKey('PrePlacementPoint', default=None, on_delete=models.CASCADE)
# pvz_postamates_group = models.ForeignKey('Post_and_pvzGroup', default=None, on_delete=models.CASCADE)
# dist = models.FloatField(blank=True, null=True, default=None)
class TaskStatus(models.Model): class TaskStatus(models.Model):

@ -9,11 +9,11 @@ class PlacementPointSerializer(serializers.ModelSerializer):
model = models.PlacementPoint model = models.PlacementPoint
fields = '__all__' fields = '__all__'
def to_representation(self, instance): # def to_representation(self, instance):
representation = super().to_representation(instance) # representation = super().to_representation(instance)
min_distances = PointService.get_min_distances_to_group(instance.id) # min_distances = PointService.get_min_distances_to_group(instance.id)
representation['min_distance_to_group'] = min_distances # representation['min_distance_to_group'] = min_distances
return representation # return representation
class PrePlacementPointSerializer(PlacementPointSerializer): class PrePlacementPointSerializer(PlacementPointSerializer):
class Meta: class Meta:

@ -62,7 +62,7 @@ class PointService:
else: else:
objs = [obj.first()] objs = [obj.first()]
for o in objs: for o in objs:
distances = models.PlacementPointPVZDistance.objects.filter(placement_point=o.get('id')).all() # distances = models.PlacementPointPVZDistance.objects.filter(placement_point=o.get('id')).all()
o.pop('id') o.pop('id')
street = o.pop('street') street = o.pop('street')
house_number = o.pop('house_number') house_number = o.pop('house_number')
@ -77,10 +77,11 @@ class PointService:
house_number=house_number, house_number=house_number,
matching_status=MatchingStatus.Matched.name, matching_status=MatchingStatus.Matched.name,
defaults=o) defaults=o)
for d in distances: # по идее можно дропать
models.PrePlacementPointPVZDistance.objects.get_or_create(placement_point=pre_obj, # for d in distances:
pvz_postamates_group=d.pvz_postamates_group, # models.PrePlacementPointPVZDistance.objects.get_or_create(placement_point=pre_obj,
dist=d.dist) # pvz_postamates_group=d.pvz_postamates_group,
# dist=d.dist)
matched += 1 matched += 1
elif not rayon: elif not rayon:
@ -239,34 +240,37 @@ class PointService:
point.target_cnt_ao_mean = placement_point.target_cnt_ao_mean point.target_cnt_ao_mean = placement_point.target_cnt_ao_mean
point.save() point.save()
for group in groups: for group in groups:
self.calculate_dist_for_group(point, group, instance_type=models.PrePlacementPointPVZDistance) self.calculate_dist_for_group(point, group)
run_psql_command() run_psql_command()
@staticmethod @staticmethod
def calculate_dist_for_group(point, group, instance_type=models.PlacementPointPVZDistance): def calculate_dist_for_group(point, group):
post_object = models.Post_and_pvz.objects.filter(group__name=group.name).annotate( post_object = models.Post_and_pvz.objects.filter(group__name=group.name).annotate(
distance=Dist("wkt", point.geometry)).order_by('distance').first() distance=Dist("wkt", point.geometry)).order_by('distance').first()
d = instance_type.objects.filter(placement_point=point, setattr(point, f'd{group.id}', post_object.distance.m)
pvz_postamates_group=group).first() # getattr(point, f'd{group.id}')
if post_object: point.save()
if d: # d = instance_type.objects.filter(placement_point=point,
if d.dist > post_object.distance.m: # pvz_postamates_group=group).first()
d.dist = post_object.distance.m # if post_object:
d.save() # if d:
else: # if d.dist > post_object.distance.m:
instance_type.objects.create(placement_point=point, # d.dist = post_object.distance.m
pvz_postamates_group=group, # d.save()
dist=post_object.distance.m) # else:
# instance_type.objects.create(placement_point=point,
# pvz_postamates_group=group,
# dist=post_object.distance.m)
@staticmethod @staticmethod
def delete_preplacement_points(ids: list): def delete_preplacement_points(ids: list):
models.PrePlacementPoint.objects.filter(id__in=ids).all().delete() models.PrePlacementPoint.objects.filter(id__in=ids).all().delete()
@staticmethod # @staticmethod
def get_min_distances_to_group(postamat_id: str): # def get_min_distances_to_group(postamat_id: str):
return {d['pvz_postamates_group']: d['dist'] for d in list( # return {d['pvz_postamates_group']: d['dist'] for d in list(
models.PlacementPointPVZDistance.objects.filter(placement_point=postamat_id).values( # models.PlacementPointPVZDistance.objects.filter(placement_point=postamat_id).values(
'pvz_postamates_group', 'dist'))} # 'pvz_postamates_group', 'dist'))}
@staticmethod @staticmethod
def update_points_in_radius(qs: models.PlacementPoint, new_status: str): def update_points_in_radius(qs: models.PlacementPoint, new_status: str):

@ -423,15 +423,16 @@ def load_post_and_pvz(obj_id: int):
status.save() status.save()
post_object = models.Post_and_pvz.objects.filter(group__name=group.name).annotate( post_object = models.Post_and_pvz.objects.filter(group__name=group.name).annotate(
distance=Distance("wkt", point.geometry)).order_by('distance').first() distance=Distance("wkt", point.geometry)).order_by('distance').first()
d = models.PlacementPointPVZDistance.objects.filter(placement_point=point, setattr(point, f'd{group.id}', post_object.distance.m)
pvz_postamates_group=group).first() # d = models.PlacementPointPVZDistance.objects.filter(placement_point=point,
if d: # pvz_postamates_group=group).first()
if d.dist > post_object.distance.m: # if d:
d.dist = post_object.distance.m # if d.dist > post_object.distance.m:
d.save() # d.dist = post_object.distance.m
else: # d.save()
models.PlacementPointPVZDistance.objects.create(placement_point=point, pvz_postamates_group=group, # else:
dist=post_object.distance.m) # models.PlacementPointPVZDistance.objects.create(placement_point=point, pvz_postamates_group=group,
# dist=post_object.distance.m)
status.status = "Подсчет расстояний завершен" status.status = "Подсчет расстояний завершен"
status.save() status.save()
point_qs = models.PlacementPoint.objects.all() point_qs = models.PlacementPoint.objects.all()

@ -1,5 +1,6 @@
import warnings import warnings
from http import HTTPStatus from http import HTTPStatus
from django.conf import settings
from django.db.models import Q from django.db.models import Q
from django.http import HttpResponse from django.http import HttpResponse
@ -186,34 +187,37 @@ class PlacementPointViewSet(ReadOnlyModelViewSet):
inclded = list(included.split(',')) inclded = list(included.split(','))
qs2 = self.queryset.filter(pk__in=inclded).all() qs2 = self.queryset.filter(pk__in=inclded).all()
qs = (qs | qs2).distinct() qs = (qs | qs2).distinct()
# TODO: fix to new fields
if group_dists_lt: if group_dists_lt:
g_d = [list(g.split(',')) for g in group_dists_lt] g_d = [list(g.split(',')) for g in group_dists_lt]
for group in g_d: for group in g_d:
if basename == 'preplacementpoint': # if basename == 'preplacementpoint':
filtered_points = list( # filtered_points = list(
models.PrePlacementPointPVZDistance.objects.filter(pvz_postamates_group__id=int(group[0]), # models.PrePlacementPointPVZDistance.objects.filter(pvz_postamates_group__id=int(group[0]),
dist__lt=int(group[1])).values_list( # dist__lt=int(group[1])).values_list(
'placement_point__id', flat=True)) # 'placement_point__id', flat=True))
else: # else:
filtered_points = list( # filtered_points = list(
models.PlacementPointPVZDistance.objects.filter(pvz_postamates_group__id=int(group[0]), # models.PlacementPointPVZDistance.objects.filter(pvz_postamates_group__id=int(group[0]),
dist__lt=int(group[1])).values_list( # dist__lt=int(group[1])).values_list(
'placement_point__id', flat=True)) # 'placement_point__id', flat=True))
qs = qs.filter(id__in=filtered_points) kwargs = {f'd{group[0]}__lt': group[1]}
qs = qs.filter(**kwargs)
if group_dists_gt: if group_dists_gt:
g_d = [list(g.split(',')) for g in group_dists_gt] g_d = [list(g.split(',')) for g in group_dists_gt]
for group in g_d: for group in g_d:
if basename == 'preplacementpoint': # if basename == 'preplacementpoint':
filtered_points = list( # filtered_points = list(
models.PrePlacementPointPVZDistance.objects.filter(pvz_postamates_group__id=int(group[0]), # models.PrePlacementPointPVZDistance.objects.filter(pvz_postamates_group__id=int(group[0]),
dist__gt=int(group[1])).values_list( # dist__gt=int(group[1])).values_list(
'placement_point__id', flat=True)) # 'placement_point__id', flat=True))
else: # else:
filtered_points = list( # filtered_points = list(
models.PlacementPointPVZDistance.objects.filter(pvz_postamates_group__id=int(group[0]), # models.PlacementPointPVZDistance.objects.filter(pvz_postamates_group__id=int(group[0]),
dist__gt=int(group[1])).values_list( # dist__gt=int(group[1])).values_list(
'placement_point__id', flat=True)) # 'placement_point__id', flat=True))
qs = qs.filter(id__in=filtered_points) kwargs = {f'd{group[0]}__gt': group[1]}
qs = qs.filter(**kwargs)
return qs return qs
@action(methods=['get'], detail=False) @action(methods=['get'], detail=False)
@ -246,10 +250,19 @@ class PlacementPointViewSet(ReadOnlyModelViewSet):
min(temp_data[key]), max(temp_data[key]), min(temp_data[key]), max(temp_data[key]),
] if temp_data[key] else [0, 100] for key in keys ] if temp_data[key] else [0, 100] for key in keys
} }
data['dist_to_groups'] = [{'group_id': d['pvz_postamates_group'], 'dist': [d['min_dist'], d['max_dist']]} fields_to_aggregate = [f'd{x}' for x in settings.GROUP_IDS]
for d in list( aggregations = {}
models.PlacementPointPVZDistance.objects.values('pvz_postamates_group').annotate( for field_name in fields_to_aggregate:
min_dist=Min('dist'), max_dist=Max('dist')))] aggregations[f'min_{field_name}'] = Min(field_name)
aggregations[f'max_{field_name}'] = Max(field_name)
result = models.PlacementPoint.objects.aggregate(**aggregations)
data['dist_to_groups'] = [
{'group_id': d, 'dist': [result[f'min_d{d}'], result[f'max_d{d}']]} for d in settings.GROUP_IDS
]
# data['dist_to_groups'] = [{'group_id': d['pvz_postamates_group'], 'dist': [d['min_dist'], d['max_dist']]}
# for d in list(
# models.PlacementPointPVZDistance.objects.values('pvz_postamates_group').annotate(
# min_dist=Min('dist'), max_dist=Max('dist')))]
return data return data
@ -354,44 +367,6 @@ class PlacementPointViewSet(ReadOnlyModelViewSet):
st = status.status st = status.status
return Response({'last_time': models.LastMLCall.objects.first().dt, 'task_status': st}, status=HTTPStatus.OK) return Response({'last_time': models.LastMLCall.objects.first().dt, 'task_status': st}, status=HTTPStatus.OK)
@action(detail=False, methods=['get'])
def avg_bi_values(self, request):
qs = self.get_queryset()
result = qs.aggregate(Avg('target_dist_shap'), Avg('target_post_cnt_shap'), Avg('target_cnt_ao_mean_shap'),
Avg('rival_pvz_cnt_shap'), Avg('rival_post_cnt_shap'), Avg('metro_dist_shap'),
Avg('property_price_bargains_shap'), Avg('property_price_offers_shap'),
Avg('property_mean_floor_shap'), Avg('property_era_shap'), Avg('flats_cnt_shap'),
Avg('popul_home_shap'), Avg('popul_job_shap'), Avg('yndxfood_sum_shap'),
Avg('yndxfood_cnt_shap'),
Avg('school_cnt_shap'), Avg('kindergar_cnt_shap'), Avg('public_stop_cnt_shap'),
Avg('sport_center_cnt_shap'), Avg('pharmacy_cnt_shap'), Avg('supermarket_cnt_shap'),
Avg('supermarket_premium_cnt_shap'), Avg('clinic_cnt_shap'), Avg('bank_cnt_shap'),
Avg('reca_cnt_shap'), Avg('lab_cnt_shap'), Avg('culture_cnt_shap'),
Avg('attraction_cnt_shap'),
Avg('mfc_cnt_shap'), Avg('bc_cnt_shap'), Avg('tc_cnt_shap'), Avg('business_activity_shap'),
Max('target_dist_shap'), Max('target_post_cnt_shap'), Max('target_cnt_ao_mean_shap'),
Max('rival_pvz_cnt_shap'), Max('rival_post_cnt_shap'), Max('metro_dist_shap'),
Max('property_price_bargains_shap'), Max('property_price_offers_shap'),
Max('property_mean_floor_shap'), Max('property_era_shap'), Max('flats_cnt_shap'),
Max('popul_home_shap'), Max('popul_job_shap'), Max('yndxfood_sum_shap'),
Max('yndxfood_cnt_shap'), Max('school_cnt_shap'), Max('kindergar_cnt_shap'),
Max('public_stop_cnt_shap'), Max('sport_center_cnt_shap'), Max('pharmacy_cnt_shap'),
Max('supermarket_cnt_shap'), Max('supermarket_premium_cnt_shap'), Max('clinic_cnt_shap'),
Max('bank_cnt_shap'), Max('reca_cnt_shap'), Max('lab_cnt_shap'), Max('culture_cnt_shap'),
Max('attraction_cnt_shap'), Max('mfc_cnt_shap'), Max('bc_cnt_shap'), Max('tc_cnt_shap'),
Max('business_activity_shap'), Min('target_dist_shap'), Min('target_post_cnt_shap'),
Min('target_cnt_ao_mean_shap'), Min('rival_pvz_cnt_shap'), Min('rival_post_cnt_shap'),
Min('metro_dist_shap'), Min('property_price_bargains_shap'),
Min('property_price_offers_shap'), Min('property_mean_floor_shap'), Min('property_era_shap'),
Min('flats_cnt_shap'), Min('popul_home_shap'), Min('popul_job_shap'),
Min('yndxfood_sum_shap'), Min('yndxfood_cnt_shap'), Min('school_cnt_shap'),
Min('kindergar_cnt_shap'), Min('public_stop_cnt_shap'), Min('sport_center_cnt_shap'),
Min('pharmacy_cnt_shap'), Min('supermarket_cnt_shap'), Min('supermarket_premium_cnt_shap'),
Min('clinic_cnt_shap'), Min('bank_cnt_shap'), Min('reca_cnt_shap'), Min('lab_cnt_shap'),
Min('culture_cnt_shap'), Min('attraction_cnt_shap'), Min('mfc_cnt_shap'), Min('bc_cnt_shap'),
Min('tc_cnt_shap'), Min('business_activity_shap'))
return Response({'result': result}, status=HTTPStatus.OK)
class PrePlacementPointViewSet(PlacementPointViewSet): class PrePlacementPointViewSet(PlacementPointViewSet):
queryset = models.PrePlacementPoint.objects queryset = models.PrePlacementPoint.objects
@ -439,12 +414,13 @@ class PrePlacementPointViewSet(PlacementPointViewSet):
obj['district'] = models.AO.objects.get(id=ao) obj['district'] = models.AO.objects.get(id=ao)
obj['area'] = models.Rayon.objects.get(id=rayon) obj['area'] = models.Rayon.objects.get(id=rayon)
obj['age_day'] = 1 obj['age_day'] = 1
new_obj = models.PlacementPoint.objects.create(**obj) models.PlacementPoint.objects.create(**obj)
dists = models.PrePlacementPointPVZDistance.objects.filter(placement_point=q).all() # new_obj = models.PlacementPoint.objects.create(**obj)
for d in dists: # dists = models.PrePlacementPointPVZDistance.objects.filter(placement_point=q).all()
models.PlacementPointPVZDistance.objects.get_or_create(placement_point=new_obj, # for d in dists:
pvz_postamates_group=d.pvz_postamates_group, # models.PlacementPointPVZDistance.objects.get_or_create(placement_point=new_obj,
dist=d.dist) # pvz_postamates_group=d.pvz_postamates_group,
# dist=d.dist)
models.PrePlacementPoint.objects.all().delete() models.PrePlacementPoint.objects.all().delete()
return Response(status=HTTPStatus.OK, ) return Response(status=HTTPStatus.OK, )

Loading…
Cancel
Save