Удалить 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. Как обработать это взаимное отношение внешних ключей при удалении, поскольку удаление любого из этих двух полей приводит к исключению внешнего ключа?

Если вы действительно не хотите делать миграцию (какая-либо конкретная причина?) и если вы не против сделать это вручную в этот раз. Тогда у вас есть два варианта:

  1. Зайдите в панель администратора и вручную измените поле User в экземпляре project на другого пользователя или на NULL. Теперь вы можете удалить экземпляр User, поскольку он больше не упоминается в проекте.
  2. Если это сработало, вы можете удалить и сам проект.

Курьез, если это будет работать, дайте мне знать!

Вернуться на верх