Унаследованная модель с FK для базовой модели перезаписывает базовую ссылку - PullRequest
0 голосов
/ 17 марта 2020

У меня есть ситуация, когда у меня есть 2 модели, вторая модель (B) является подклассом первой (A), а также имеет (другую) ссылку 1-к-1 на другой экземпляр той же родительской модели (А). Цель состоит в том, чтобы некоторые особые случаи A были связаны с другими экземплярами A в новой таблице B. По причинам, о которых я не буду здесь говорить, это должны быть две разные модели (ie Я не могу добавить нулевое эталонное поле 1 к 1 на A). Это показано ниже.

class A(models.Model):
    name = models.CharField()

class B(A):
    reference = models.OneToOneField(A)

Однако теперь, когда я пытаюсь создать экземпляр B со ссылкой на другой A, это не работает. Рассмотрим следующее:

>>> a1 = A(name='a1')
>>> a1.save()
>>> b1 = B(name='b1', reference=a1)
>>> b1.save()
>>> b1.id
1
>>> b1.reference.id
1

Или в качестве альтернативы:

>>> a1 = A(name='a1')
>>> a1.save()
>>> b1 = B(name='b1')
>>> b1.save()
>>> b1.reference = a1
>>> b1.save()
>>> b1.id
2
>>> b1.reference.id
2

В то время как я хотел бы, чтобы b1.id равнялся 2, а b1.reference.id равнялся 1 (ссылаясь на a1) ,

Что здесь происходит? Почему я не могу иметь независимые ссылки на базовый экземпляр с ptr_id и другой записью в той же таблице в поле reference?

...