У меня есть следующая структура наследования моих моделей Django:
Transaction
SimpleTransaction
SubscriptionTransaction
Item
SimpleItem
SubscriptionItem
Модель SimpleTransaction
относится к модели SimpleItem
, а класс SubscriptionTransaction
относится к модели SubscriptionItem
.
Самый очевидный способ сделать это - определить поле item
в Transaction
:
class Transaction(models.Model):
# ...
item = models.ForeignKey('Item')
# ...
Но я бы хотел, чтобы t.item
ссылался на SimpleItem
или SubscriptionItem
(а не на базовый класс Item
, как в приведенном выше коде) в зависимости от того, является ли t
SimpleTransaction
или SubscriptionTransaction
.
Как это можно сделать в Джанго?
Или, может быть, ссылка на производный класс (SimpleItem
или SubscriptionItem
) вместо Item
может как-то сильно повлиять на производительность, так как он будет запрашивать чтение SimpleItem
или SubscriptionItem
, даже когда просто Item
поля необходимы? а так лучше обратиться к базовому классу, а не выдумывать такой вопрос? Однако наличие ссылок на определенный класс Item
(не просто Item
базовый класс) из SimpleTransaction
или SubscriptionTransaction
обеспечивает ссылочную целостность. Так я должен сделать это, чтобы улучшить «стабильность» БД?