Удалить 2 разных объекта модели, которые ссылаются друг на друга как внешние ключи
У нас есть две модели Django:
class Project(models.Model):
project_title = models.CharField(max_length=30)
owner = models.ForeignKey(User, null=True, on_delete=models.DO_NOTHING)
class User(models.Model):
usernmae = models.CharField(max_length=50)
active_project = models.ForeignKey(User, null=True, on_delete=models.DO_NOTHING, related_name='current_project')
У меня есть пользователь с объектом (с id
скажем 692
). И этот пользователь создал проект с id=12345
, поэтому эти owner
поля будут иметь эту конкретную ссылку.
Я хочу удалить этого пользователя. Но он выдает ошибку, что
delete on table "app_user" violates foreign key constraint
Это ожидается, так как on_delete=models.DO_NOTHING
, было установлено. Одним из способов, который я обнаружил, было использование on_delete=models.CASCADE
.
Вопрос: Как мне удалить пользователя (692
), не изменяя определение модели (нужно заново запускать миграцию)?
Если сделать это вручную, удалив сначала проект, то это приведет к той же самой ошибке foreign-key
, так как поле owner
является объектом User
.
Как обработать это взаимное отношение внешних ключей при удалении, поскольку удаление любого из этих двух полей приводит к исключению внешнего ключа?
Если вы действительно не хотите делать миграцию (какая-либо конкретная причина?) и если вы не против сделать это вручную в этот раз. Тогда у вас есть два варианта:
- Зайдите в панель администратора и вручную измените поле
User
в экземпляреproject
на другого пользователя или на NULL. Теперь вы можете удалить экземплярUser
, поскольку он больше не упоминается в проекте. - Если это сработало, вы можете удалить и сам проект.
Курьез, если это будет работать, дайте мне знать!