Несоответствие внешнего ключа Django при выполнении миграций для полиморфных отношений

У меня есть следующие модели в приложении Django:

class Sender(PolymorphicModel):
    name = models.CharField(max_length=100)
    email = models.EmailField(null=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now_add=True)

class Student(Sender):
    group_name = models.CharField(max_length=100, null=True)

class Teacher(Sender):
    bio = models.TextField(max_length=255, null=True)

class Connection(models.Model):
    student_id = models.ForeignKey('students.Student', null=False, on_delete=models.CASCADE)
    teacher_id = models.ForeignKey('teachers.Teacher', null=False, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now_add=True)

class Message(models.Model):
    body = models.TextField(max_length=255, null=False)
    sender_id = models.ForeignKey('senders.Sender', null=False, on_delete=models.CASCADE)
    connection_id = models.ForeignKey('connections.Connection', null=False, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)

Модельные классы Teacher и Student наследуются от Sender; я хочу, чтобы Connection имел определенные внешние ключи к Teacher и Student соответственно.

Когда я создаю и запускаю миграции, я получаю django.db.utils.OperationalError: foreign key mismatch - "connections_connection" ссылается на "teachers_teacher".

.

Не могу ли я использовать дочернюю модель, которая наследуется от полиморфной модели, в качестве внешнего ключа для другой модели? Есть ли способ обойти это, или я должен использовать другую парадигму? Спасибо!

Я нашел способ сделать это самостоятельно, удалив полиморфный класс Sender и используя GenericForeignKey для Message, но я был бы рад услышать и альтернативные подходы.

class Student(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField()
    group_name = models.CharField(max_length=100, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now_add=True)

class Teacher(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField()
    bio = models.CharField(max_length=100, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now_add=True)

class Connection(models.Model):
    student_id = models.ForeignKey('students.Student', null=False, on_delete=models.CASCADE)
    teacher_id = models.ForeignKey('teachers.Teacher', null=False, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now_add=True)

class Message(models.Model):
    body = models.TextField(max_length=255, null=False)
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    sender_id = models.PositiveIntegerField(null=False)
    content_sender = GenericForeignKey('content_type', 'sender_id')
    connection_id = models.ForeignKey('connections.Connection', null=False, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
Вернуться на верх