Повесил сигнал об изменении m2m модели.
Если меняю "теги" через админку, то возникают такие сигналы:
1. сначала pre_clear и post_clear, очищает все Bookmarks у модели News:
{'action': 'pre_clear', 'using': 'default', 'signal': <django.db.models.signals.ModelSignal object at 0x7f58f54be630>, 'pk_set': None, 'model': <class 'InfoPortal.models.Bookmarks'>, 'instance': <News: [TEST]>, 'reverse': False}
- А потом уже pre_add и post_add со набором pk номеров экземпляров модели Bookmarks:
{'action': 'pre_add', 'using': 'default', 'signal': <django.db.models.signals.ModelSignal object at 0x7f58f54be630>, 'pk_set': {1}, 'model': <class 'InfoPortal.models.Bookmarks'>, 'instance': <News: [TEST]>, 'reverse': False}.
Если с добавлением в принципе все понятно - перебираем в наборе pk номера и инкрементируем, то вот если мы при редактировании у какой-нибудь модели News "убираем" теги, то тут уже не понятно как уменьшать счетчик...
Разве что такой вариант:
При сигналах pre_clear получаем список всех "тегов":
tags = instance.bookmarks.all()
И у него делаем декримент апдейтом.
Потом в сигнале post_add делаем тоже, только инкрементируем уже счетчик разом у всех экзмпляров bookmarks.
Только это как-то, на костыль, что ли похоже...
может есть более "изящное" решение?
Updated 9 Sept. 2015, 20:45 by mounty.