Как удалить экземпляр модели и экземпляр из отношения 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()
Попробуйте этот код.