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. есть идея для более производительного решения.

Заранее спасибо!

Вернуться на верх