Можно ли отключить генерацию связанных объектов при удалении объекта через администратора Django? - PullRequest
0 голосов
/ 20 ноября 2018

В настоящее время я поддерживаю устаревшую систему, пока запускается новая система.Недавно я заметил, что получаю тайм-аут при попытке удалить определенные объекты из конкретной модели.Я отследил это, чтобы быть связанным со следующим вопросом, на который есть принятый ответ: Администратор Django зависает (до ошибки тайм-аута) для конкретной модели при попытке редактировать / создать

У меня проблема в том, что связанные объекты не связаны напрямую с моей рассматриваемой моделью.

Например, у меня есть следующие модели (обычно названные так, чтобы оставаться неопределенными из-за IP в моей компании):

  • ModelA - это модель, с которой я вижу проблему при удалении с сайта администратора Django
  • ModelB, который содержит поле ForeignKey для ModelA
  • ModelC, которое содержит поле ForeignKey для ModelB
  • ModelD, которое содержит поле ForeignKey для ModelC
  • ModelE, которое содержит поле ForeignKey для ModelD

Подробности модели:

  • ModelE может содержать десятки / сотни / тысячи записей для любой записи
  • ModelC.Дополнительно ModelC может содержать десятки / сотни / тысячи записей для любой записи ModelB

В настоящее время, когда я пытаюсь удалить ModelA Django пытается сгенерировать все связанные объекты полностью вниздо ModelE, что вызывает таймаут в некоторых случаях с большим количеством связанных ModelC и ModelE.

Есть ли способ избежать этого, переопределив пользовательский шаблон, такой как delete_confirmation_template, или любым другим способом?В идеале я хотел бы показать резюме, но я не уверен, что это будет возможно с характером этой проблемы.

Несколько деталей для контекста:

  • Я чувствую, что это может быть связано с плохой общей структурой в нашей схеме БД, но, как я упоминал ранее, это устаревшая система.
  • Мне не нужно немедленное исправление для этого, поскольку я фактически никогда не буду удалять записи для этой модели, за исключением моего текущего сценария / задачи очистки дублированных записей (ошибка пользователя не контролируется корректно формами; формы теперь проверяютсядля этого), что делается через скрипт миграции.Я просто заметил это при попытке очистить вещи и использовать эту промежуточную страницу в качестве проверки работоспособности при тестировании указанного скрипта миграции

Скриншот тайм-аута

1 Ответ

0 голосов
/ 20 ноября 2018

Из обсуждений в комментариях я пришел к следующему выводу:

  • on_delete, установленный на CASCADE для моделей, был неверным и вызывал очень высокие времена при поиске связанныхобъекты при попытке удалить модель
  • Поскольку я не хочу разрешать удаление этих объектов, когда другие конкретные модели имеют ассоциации с ними, я проанализировал и соответственно установил on_delete в PROTECT, где это применимо
  • Теперь, когда я пытаюсь удалить объект, он не позволяет мне удалить объект из-за защищенных связанных элементов.Это также решает проблему тайм-аута, которую я наблюдал ранее

Это позволяет мне по-прежнему удалять объекты из этой модели через сайт администратора Django, ЕСЛИ у них нет связанных защищенных объектов, что в итоге является функциональностью, которую яжелание

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...