Обновление списка данных пользовательским способом
У меня есть сценарий, и я хочу знать наилучший возможный способ его решения.
<addressList (id), например (который я получаю во фронтенде) -
addresses=[1,2,3,4]
После получения всех адресов на фронтенд, пользователь может удалить один или n-ное количество адресов.
Примечание - операция удаления только удаляет объект адреса из списка (на фронтенде), а не удаляет его навсегда из базы данных.
здесь addressList теперь может быть -
addresses=[1,4]
Кроме того, пользователи добавляют n количество новых адресов
новый список адресов может быть -
addresses=[1,4, {newAddressDetail}, {newAddressDetail}]
Не эти обновленные данные (адреса) передаются на бэкэнд для процесса обновления.
Хотелось бы узнать, как лучше всего обработать этот сценарий на бэкенде?
Вещи -
- удалить все ранее сохраненные адреса, которые не принимаются в настоящее время.
- не изменять ранее сохраненные адреса, которые принимаются в настоящее время.
- создавать новые адреса, которых нет в базе данных.
Не рекомендуется удалять адрес из базы данных, когда пользователь удаляет его из фронтенда. Адрес не редактируется во фронтенде, а данные, которые я здесь показал, предназначены только для пояснения и не являются корректными с технической точки зрения.
При необходимости могу предоставить более подробную информацию.
Я думаю, что лучше всего использовать sets в python.
Так что в вашем бэкенде что-то вроде:
new = set(addresses_from_frontend)
old = set(user.addresses.all())
Address.objects.bulk_create([Address(**item) for item in old - new])
Address.objects.filter(id__in=[a.id for a in new - old]).delete()
Выглядит это не совсем так, вероятно, вам придется использовать идентификаторы адресов для получения адресов перед их удалением и т.д. Но суть в том, что наборы - это эффективный способ сделать это bulk_create() и delete() использование фильтра также может помочь вам уменьшить количество запросов к базе данных.