Django: Эффективное обновление отношения "многие ко многим
Допустим, у нас есть Django User
с большим количеством Group
. Мы хотим обновить группы с помощью нового списка групп.
Простым, но неэффективным решением может быть следующее:
def update_users_groups(new_groups: List[Group]):
user.groups.clear()
user.groups.set(new_groups)
Немного более производительным решением является нечто похожее на:
def update_users_groups(new_groups: List[Group]):
new_groups = set([x.id for x in new_groups])
old_groups = set([x.id for x in user.groups.all()])
groups_to_add = new_groups - old_groups
if groups_to_add:
user.groups.add(*groups_to_add)
groups_to_remove = old_groups - new_groups
if groups_to_remove:
user.groups.remove(*groups_to_remove)
Я не смог найти никаких подсказок в документации для встроенного метода. Есть ли какая-нибудь лучшая практика или способ улучшить мой пример выше? Может быть, даже у s.o. есть идея для более производительного решения.
Заранее спасибо!