Как удалить экземпляр модели и экземпляр из отношения OneToOne

У меня есть две модели в django rest:

class CustomUser(AbstractBaseUser):
    email = models.EmailField(max_length=255, unique=True)

class Teacher(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

Как удалить экземпляр CustomUser, связанный при удалении экземпляра Teacher?

Я попробовал этот код, но он выдает ошибку "превышена максимальная глубина рекурсии при вызове объекта Python"

@receiver(pre_delete, sender=Teacher)
def delete_user(sender, instance, **kwargs):
    instance.user.delete()

Проблема в том, что вы используете сигнал pre_delete, и поэтому он сначала удаляет CustomUser. Удаление CustomUser каскадирует и удаляет вашего учителя, но перед удалением учителя сигнал вызывается снова, вызывая бесконечный цикл.

Измените pre_delete на post_delete в вашем @receiver.

В вашем settings.py, напишите эту строку кода после INSTALLED_APPS.

AUTH_USER_MODEL = 'your_app_name.CustomUser'

Models.py:

class Teacher(models.Model):
     user = models.OneToOneField(CustomUser, on_delete=models.CASCADE,blank=True, null=True)

View.py или Если у вас есть отдельный Signals.py:

@receiver(pre_delete, sender=CustomUser)
def delete_user(sender, instance, **kwargs):
    user = Teacher.objects.get(user=instance)
        user.delete() 

Попробуйте этот код.

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