diff --git a/fixtures/post_pvz_groups.json b/fixtures/post_pvz_groups.json index ab4de33..f57ea6a 100644 --- a/fixtures/post_pvz_groups.json +++ b/fixtures/post_pvz_groups.json @@ -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}}] \ No newline at end of file +[ + { + "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 + } + } +] \ No newline at end of file diff --git a/postamates/settings.py b/postamates/settings.py index 1a878c2..b98c2b3 100644 --- a/postamates/settings.py +++ b/postamates/settings.py @@ -9,6 +9,7 @@ https://docs.djangoproject.com/en/3.2/topics/settings/ For the full list of settings and their values, see https://docs.djangoproject.com/en/3.2/ref/settings/ """ +import json import os from pathlib import Path @@ -197,3 +198,6 @@ JSON_EXPORT_FILENAME = 'placement_points.json' DATA_UPLOAD_MAX_NUMBER_FIELDS = None GEOCODER_API_KEY = os.getenv('GEOCODER_API_KEY','TzgdKWgyI2nfaz1WHRD-aYJK4e400MiOJQP7Enf1e1M') 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] \ No newline at end of file diff --git a/service/admin.py b/service/admin.py index 0977e67..6234c1c 100644 --- a/service/admin.py +++ b/service/admin.py @@ -11,9 +11,7 @@ from service.models import AO from service.models import PlacementPoint from service.models import Rayon from service.models import PrePlacementPoint, Post_and_pvz, Post_and_pvzCategory, Post_and_pvzGroup, OtherObjects, \ - OtherObjectsGroup, \ - OtherObjectsCategory, PrePlacementPointPVZDistance, TempFiles, RaschetGroups, House -from service.models import PlacementPointPVZDistance, TaskStatus + OtherObjectsGroup, OtherObjectsCategory, TempFiles, RaschetGroups, House, TaskStatus from postamates.settings import DEBUG from django.core.cache import cache from service.utils import run_psql_command @@ -32,7 +30,6 @@ if DEBUG: my_admin_site.register(AO) my_admin_site.register(Rayon) my_admin_site.register(TempFiles) - my_admin_site.register(PlacementPointPVZDistance) 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(House) my_admin_site.register(PrePlacementPoint) -my_admin_site.register(PrePlacementPointPVZDistance) class TaskStatusAdmin(admin.ModelAdmin): diff --git a/service/models.py b/service/models.py index 9dd5246..c7cc7f3 100644 --- a/service/models.py +++ b/service/models.py @@ -115,6 +115,19 @@ class AbstractPlacementPoint(models.Model): 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 Meta: verbose_name = 'Точка' @@ -189,8 +202,6 @@ class Post_and_pvzCategory(models.Model): return self.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) include_in_ml = models.BooleanField(default=True) @@ -220,8 +231,6 @@ class OtherObjectsCategory(models.Model): return self.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) @@ -240,16 +249,18 @@ class OtherObjectsGroup(models.Model): visible = models.BooleanField(default=True) -class PlacementPointPVZDistance(models.Model): - placement_point = models.ForeignKey('PlacementPoint', 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 PrePlacementPointPVZDistance(models.Model): - 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 PlacementPointPVZDistance(models.Model): +# pass +# placement_point = models.ForeignKey('PlacementPoint', 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 PrePlacementPointPVZDistance(models.Model): +# pass +# 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): diff --git a/service/serializers.py b/service/serializers.py index e89d809..65a23ba 100644 --- a/service/serializers.py +++ b/service/serializers.py @@ -9,11 +9,11 @@ class PlacementPointSerializer(serializers.ModelSerializer): model = models.PlacementPoint fields = '__all__' - def to_representation(self, instance): - representation = super().to_representation(instance) - min_distances = PointService.get_min_distances_to_group(instance.id) - representation['min_distance_to_group'] = min_distances - return representation + # def to_representation(self, instance): + # representation = super().to_representation(instance) + # min_distances = PointService.get_min_distances_to_group(instance.id) + # representation['min_distance_to_group'] = min_distances + # return representation class PrePlacementPointSerializer(PlacementPointSerializer): class Meta: diff --git a/service/service.py b/service/service.py index 21bda46..84f0ec5 100644 --- a/service/service.py +++ b/service/service.py @@ -62,7 +62,7 @@ class PointService: else: objs = [obj.first()] 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') street = o.pop('street') house_number = o.pop('house_number') @@ -77,10 +77,11 @@ class PointService: house_number=house_number, matching_status=MatchingStatus.Matched.name, defaults=o) - for d in distances: - models.PrePlacementPointPVZDistance.objects.get_or_create(placement_point=pre_obj, - pvz_postamates_group=d.pvz_postamates_group, - dist=d.dist) + # по идее можно дропать + # for d in distances: + # models.PrePlacementPointPVZDistance.objects.get_or_create(placement_point=pre_obj, + # pvz_postamates_group=d.pvz_postamates_group, + # dist=d.dist) matched += 1 elif not rayon: @@ -239,34 +240,37 @@ class PointService: point.target_cnt_ao_mean = placement_point.target_cnt_ao_mean point.save() 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() @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( distance=Dist("wkt", point.geometry)).order_by('distance').first() - d = instance_type.objects.filter(placement_point=point, - pvz_postamates_group=group).first() - if post_object: - if d: - if d.dist > post_object.distance.m: - d.dist = post_object.distance.m - d.save() - else: - instance_type.objects.create(placement_point=point, - pvz_postamates_group=group, - dist=post_object.distance.m) + setattr(point, f'd{group.id}', post_object.distance.m) + # getattr(point, f'd{group.id}') + point.save() + # d = instance_type.objects.filter(placement_point=point, + # pvz_postamates_group=group).first() + # if post_object: + # if d: + # if d.dist > post_object.distance.m: + # d.dist = post_object.distance.m + # d.save() + # else: + # instance_type.objects.create(placement_point=point, + # pvz_postamates_group=group, + # dist=post_object.distance.m) @staticmethod def delete_preplacement_points(ids: list): models.PrePlacementPoint.objects.filter(id__in=ids).all().delete() - @staticmethod - def get_min_distances_to_group(postamat_id: str): - return {d['pvz_postamates_group']: d['dist'] for d in list( - models.PlacementPointPVZDistance.objects.filter(placement_point=postamat_id).values( - 'pvz_postamates_group', 'dist'))} + # @staticmethod + # def get_min_distances_to_group(postamat_id: str): + # return {d['pvz_postamates_group']: d['dist'] for d in list( + # models.PlacementPointPVZDistance.objects.filter(placement_point=postamat_id).values( + # 'pvz_postamates_group', 'dist'))} @staticmethod def update_points_in_radius(qs: models.PlacementPoint, new_status: str): diff --git a/service/tasks.py b/service/tasks.py index 5f80fca..d451b95 100644 --- a/service/tasks.py +++ b/service/tasks.py @@ -423,15 +423,16 @@ def load_post_and_pvz(obj_id: int): status.save() post_object = models.Post_and_pvz.objects.filter(group__name=group.name).annotate( distance=Distance("wkt", point.geometry)).order_by('distance').first() - d = models.PlacementPointPVZDistance.objects.filter(placement_point=point, - pvz_postamates_group=group).first() - if d: - if d.dist > post_object.distance.m: - d.dist = post_object.distance.m - d.save() - else: - models.PlacementPointPVZDistance.objects.create(placement_point=point, pvz_postamates_group=group, - dist=post_object.distance.m) + setattr(point, f'd{group.id}', post_object.distance.m) + # d = models.PlacementPointPVZDistance.objects.filter(placement_point=point, + # pvz_postamates_group=group).first() + # if d: + # if d.dist > post_object.distance.m: + # d.dist = post_object.distance.m + # d.save() + # else: + # models.PlacementPointPVZDistance.objects.create(placement_point=point, pvz_postamates_group=group, + # dist=post_object.distance.m) status.status = "Подсчет расстояний завершен" status.save() point_qs = models.PlacementPoint.objects.all() diff --git a/service/views.py b/service/views.py index 3d42c9d..7983d66 100644 --- a/service/views.py +++ b/service/views.py @@ -1,5 +1,6 @@ import warnings from http import HTTPStatus +from django.conf import settings from django.db.models import Q from django.http import HttpResponse @@ -186,34 +187,37 @@ class PlacementPointViewSet(ReadOnlyModelViewSet): inclded = list(included.split(',')) qs2 = self.queryset.filter(pk__in=inclded).all() qs = (qs | qs2).distinct() + # TODO: fix to new fields if group_dists_lt: g_d = [list(g.split(',')) for g in group_dists_lt] for group in g_d: - if basename == 'preplacementpoint': - filtered_points = list( - models.PrePlacementPointPVZDistance.objects.filter(pvz_postamates_group__id=int(group[0]), - dist__lt=int(group[1])).values_list( - 'placement_point__id', flat=True)) - else: - filtered_points = list( - models.PlacementPointPVZDistance.objects.filter(pvz_postamates_group__id=int(group[0]), - dist__lt=int(group[1])).values_list( - 'placement_point__id', flat=True)) - qs = qs.filter(id__in=filtered_points) + # if basename == 'preplacementpoint': + # filtered_points = list( + # models.PrePlacementPointPVZDistance.objects.filter(pvz_postamates_group__id=int(group[0]), + # dist__lt=int(group[1])).values_list( + # 'placement_point__id', flat=True)) + # else: + # filtered_points = list( + # models.PlacementPointPVZDistance.objects.filter(pvz_postamates_group__id=int(group[0]), + # dist__lt=int(group[1])).values_list( + # 'placement_point__id', flat=True)) + kwargs = {f'd{group[0]}__lt': group[1]} + qs = qs.filter(**kwargs) if group_dists_gt: g_d = [list(g.split(',')) for g in group_dists_gt] for group in g_d: - if basename == 'preplacementpoint': - filtered_points = list( - models.PrePlacementPointPVZDistance.objects.filter(pvz_postamates_group__id=int(group[0]), - dist__gt=int(group[1])).values_list( - 'placement_point__id', flat=True)) - else: - filtered_points = list( - models.PlacementPointPVZDistance.objects.filter(pvz_postamates_group__id=int(group[0]), - dist__gt=int(group[1])).values_list( - 'placement_point__id', flat=True)) - qs = qs.filter(id__in=filtered_points) + # if basename == 'preplacementpoint': + # filtered_points = list( + # models.PrePlacementPointPVZDistance.objects.filter(pvz_postamates_group__id=int(group[0]), + # dist__gt=int(group[1])).values_list( + # 'placement_point__id', flat=True)) + # else: + # filtered_points = list( + # models.PlacementPointPVZDistance.objects.filter(pvz_postamates_group__id=int(group[0]), + # dist__gt=int(group[1])).values_list( + # 'placement_point__id', flat=True)) + kwargs = {f'd{group[0]}__gt': group[1]} + qs = qs.filter(**kwargs) return qs @action(methods=['get'], detail=False) @@ -246,10 +250,19 @@ class PlacementPointViewSet(ReadOnlyModelViewSet): min(temp_data[key]), max(temp_data[key]), ] 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']]} - for d in list( - models.PlacementPointPVZDistance.objects.values('pvz_postamates_group').annotate( - min_dist=Min('dist'), max_dist=Max('dist')))] + fields_to_aggregate = [f'd{x}' for x in settings.GROUP_IDS] + aggregations = {} + for field_name in fields_to_aggregate: + 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 @@ -354,44 +367,6 @@ class PlacementPointViewSet(ReadOnlyModelViewSet): st = status.status 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): queryset = models.PrePlacementPoint.objects @@ -439,12 +414,13 @@ class PrePlacementPointViewSet(PlacementPointViewSet): obj['district'] = models.AO.objects.get(id=ao) obj['area'] = models.Rayon.objects.get(id=rayon) obj['age_day'] = 1 - new_obj = models.PlacementPoint.objects.create(**obj) - dists = models.PrePlacementPointPVZDistance.objects.filter(placement_point=q).all() - for d in dists: - models.PlacementPointPVZDistance.objects.get_or_create(placement_point=new_obj, - pvz_postamates_group=d.pvz_postamates_group, - dist=d.dist) + models.PlacementPoint.objects.create(**obj) + # new_obj = models.PlacementPoint.objects.create(**obj) + # dists = models.PrePlacementPointPVZDistance.objects.filter(placement_point=q).all() + # for d in dists: + # models.PlacementPointPVZDistance.objects.get_or_create(placement_point=new_obj, + # pvz_postamates_group=d.pvz_postamates_group, + # dist=d.dist) models.PrePlacementPoint.objects.all().delete() return Response(status=HTTPStatus.OK, )