Найти - Пользователи
Полная версия: m2m_changed post_remove
Начало » Django » m2m_changed post_remove
1
Budulianin
Всем привет

Мне нужно при удалении записи из таблицы, изменять значение в записи другой таблицы, у таблиц связь ManyToManyField

Хотел воспользоваться m2m_changed, когда action=“post_remove”, но такое событие, как выяснилось, m2m_changed не отлавливает при удалении записи. Поискал причины, где-то пишут, что это баг, где-то предполагают, что логика у post_remove иная.

Нашёл такое решение
Но пока не особо понял его. Наверняка кто-то сталкивался с этим. Как решали проблему?
lorien
А почему нельзя просто в post_delete объекта, изменять другой объект?
Например, объекты A <–m2m–> B.
Удаляется A, ловим post_delete, смотрим, с чем он соединён и изменяем B
Budulianin
lorien
А почему нельзя просто в post_delete объекта, изменять другой объект?Например, объекты A <–m2m–> B.Удаляется A, ловим post_delete, смотрим, с чем он соединён и изменяем B

Потому что после post_delete связи с другой таблицей уже нет
def post_delete_category_count(sender, instance, **kwargs)
    print(instance.categories.all())
post_delete.connect(post_delete_category_count, Article)
Выведет
[]
lorien
А если pre_delete?
Budulianin
lorien
А если pre_delete?

pre_delete конечно можно, НО смущает меня такой подход :)

Неизвестно ещё, удалится запись или нет, а мы уже производим действия, как будто она удалилась.

Пока что оставил pre_delete, но всё таки что-то надо придумать, чтобы именно после удаления работало
lorien
Во время pre_delete вы можете в redis или может быть в какой-нить runt-time объект сохранять ID связанного объекта и уже затем в post_delete удалять его.
Budulianin
lorien
Во время pre_delete вы можете в redis или может быть в какой-нить runt-time объект сохранять ID связанного объекта и уже затем в post_delete удалять его.

Спасибо за подсказку
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB