У меня есть ситуация, когда у меня есть 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
?