Пытаюсь сделать сигнал 'friend request' в django, но получаю ошибку ограничения FOREIGN KEY - Django

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

FOREIGN KEY constraint failed

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

модель профиля учителя (TeacherDetail)

class TeacherDetail(models.Model):
   user = models.OneToOneField(CustomUser, on_delete=models.CASCADE, null=True, blank=True)
   student = models.ManyToManyField(CustomUser, blank=True, related_name='students') # this is the student's list

профиль студента (StudentDetail)

class StudentDetail(models.Model):
   user = models.OneToOneField(CustomUser, on_delete=models.CASCADE, null=True, blank=True)
   teacher = models.ManyToManyField(CustomUser, blank=True, related_name='teachers') # this is the teacher's list

модель, хранящая отправителя и получателя (Relationship)

STATUS_CHOICES=(
    ('sent', 'sent'),
    ('pending', 'pending'),
    ('accepted', 'accepted')
)


class Relationship(models.Model):
    
    id = models.UUIDField(primary_key=True, editable=False, default=uuid.uuid4)
    
    sender = models.ForeignKey(CustomUser, on_delete=models.CASCADE, related_name='sender') # the student
    
    receiver = models.OneToOneField(CustomUser, on_delete=models.CASCADE, related_name='reciever') # the teacher
    
    status = models.CharField(max_length= 10, choices=STATUS_CHOICES)

    created_on = models.DateTimeField(auto_now_add=True, editable=False)
    
    updated_on = models.DateTimeField(auto_now=True, editable=False)

сигналы


@receiver(post_save, sender=Relationship)
def handle_student_to_teacher_req(sender, instance, created, **kwargs):
    
    student_sender = instance.sender 
    teacher_receiver = instance.receiver
    
    if instance.status == 'accepted':
        
        print(f"student_sender {student_sender}")
        print(f"teacher_receiver {teacher_receiver}")
        
        student_sender.teachers.add(teacher_receiver.id)
        teacher_receiver.students.add(student_sender.id)
        
        student_sender.save()
        teacher_receiver.save()

Я впервые использую сигналы, поэтому прошу помочь исправить код выше

Я допустил ошибку при назначении моделей в модели отношений. После того, как я сделал следующее изменение, ошибка была исправлена.

class Relationship(models.Model):
    
    id = models.UUIDField(primary_key=True, editable=False, default=uuid.uuid4)
    
    sender = models.ForeignKey(StudentDetail, on_delete=models.CASCADE, related_name='sender') # the student
    
    receiver = models.OneToOneField(TeacherDetail, on_delete=models.CASCADE, related_name='reciever') # the teacher
    
    status = models.CharField(max_length= 10, choices=STATUS_CHOICES)

    created_on = models.DateTimeField(auto_now_add=True, editable=False)
    
    updated_on = models.DateTimeField(auto_now=True, editable=False)
Вернуться на верх