Кто не знал этой особенности, получал граблями по лбу либо при тестировании, либо уже, что тоже бывало , при эксплуатации.
Классический фейл с django-lfs: оператор интернет магазина решает удалить производителя, ставшего ненужным. На этот момент к производителю были привязаны пара сотен товаров.
Manage-интерфейс lfs настолько дружелюбен, что не предупреждает юзера об удалении этих пары сотен товаров, заодно с удалением производителя. Но ведь так можно и до инфаркта людей довести! ) В общем эдакое "кто не спрятался я не виноват" кто не делает бекап, вбивает все заново))
Более опытные django-воды обходили подобные проблемы либо на уровне БД либо в хуке для delete-операции, явно обнуляя соответствующие поля в ссылающихся таблицах.
Начиная с версии 1.3 появилась возможность настраивать ORM при удалении объекта. Для этого в описании поля модели надо указывать: on_delete=models.SET_NULL
Круто, только вот разрабы lfs об этом не позаботились, так что патчить модели надо самим.
Ну и в завершение.. чтобы избегать подобных граблей:
1. не надейтесь на протестированность сторонних решений, особенно , если они бесплатные
2. постоянно углубляйте знания инструментария, которым пользуетесь .. в данном случае курить djangoproject.com
3. ежедневный бекап БД спасет от большинства подобных фейлов ( а лучше бекапиться несколько раз в день )
Комментариев нет:
Отправить комментарий
Если Вы нашли ошибку у автора, у Вас есть вопрос или просто хотите поделиться чем-то полезным, то пишите - не стесняйтесь..