@Flipzy
Веб-разработчик

Почему удаляются записи в базе данных?

Столкнулся с такой проблемой, при добавлении новых данных в БД - удаляются старые.

Суть проекта такая, мне от мобильного приложения приходит JSON, я его распихиваю по базе данных. Потом я рендерю на сайте табличку из excel файла, где 1 строка таблицы - светильник. Потом я цветом обозначаю результат действия над светильником (успешно или нет) и генерирую историю действий со светильником.

Так вот, если уже были действия с 3 светильником (3 строка таблицы), и выполнить действия с 4 светильником, то пропадают данные о 3-ем, и наоборот. При чём такая проблема только с этими светильниками, с остальными всё нормально.

Я предполагаю, что проблема кроется в функции handle_mobile_request при создании записи в модели Support, а конкретнее из-за использования метода update_or_create, потому что когда я изменил его на create, то данные перестали пропадать, но, соответственно в базе данных появилась куча одинаковых записей и перестала работать история действий. Я полагаю, что запись просто обновляется и перезаписывает те данные, которые отличаются у этих светильников, что достаточно странно, ведь тогда точно такая же история была бы и с остальными светильниками

скрин таблицы с сайта:
660fc5855a1bb597050159.png

модели и представления:
https://gist.github.com/Flipzzzy/f5bd4b11fe006b9fe...
  • Вопрос задан
  • 98 просмотров
Решения вопроса 1
@Flipzy Автор вопроса
Веб-разработчик
Видимо я сам нашёл решение, проблема была в том, что при создании записей в таблице support у меня был указан метод update_or_create. В условиях, по которым он искал существующие записи были указаны только данные, которые могут повторяться от записи к записи, соответственно, я добавил в параметры поиска ещё данные, которые теперь делали поиск уникальным.

было:
coordinates = data.get('CoordinatesSupport', '').split(', ')
            if len(coordinates) == 2:
                support_latitude, support_longitude = map(float, coordinates)
                Support_instance, support_created = Support.objects.update_or_create(
                    support_number=float(data['NumSupport']),
                    defaults={
                        'power_group': Power_Group_instance,
                        'power_station': Power_Station_instance,
                        'control_address': Control_Address_instance,
                        'support_latitude': support_latitude,
                        'support_longitude': support_longitude,
                    }
                )


стало:
coordinates = data.get('CoordinatesSupport', '').split(', ')
            if len(coordinates) == 2:
                support_latitude, support_longitude = map(float, coordinates)
                Support_instance, support_created = Support.objects.update_or_create(
                    support_number=float(data['NumSupport']),
                    support_latitude=support_latitude,
                    support_longitude=support_longitude,
                    defaults={
                        'power_group': Power_Group_instance,
                        'power_station': Power_Station_instance,
                        'control_address': Control_Address_instance,
                    }
                )


если этот ответ отмечен решением, то он и является правильным ответом
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы