Принудительные отношения в моделях django для моделей, которые официально не связаны с FK

#django #django-models #django-admin #foreign-key-relationship

#django #django-модели #django-администратор #foreign-key-relationship

Вопрос:

Я пытаюсь выяснить, как заставить систему администрирования django отображать мои модели в виде встроенных строк, когда нет прямого FK от дочерней модели к родительской.

У меня есть три модели (псевдокод):

 class CampaignMain(models.model):
    ...

class CampaignMonitor(models.model): 
    campaign = models.OneToOneField(CampaignMain, pk=True)

class CampaignTransaction(models.model):
    campaign = models.ForeignKey(CampaignMain)
  

Таким образом, как CampaignMonitor, так и CampaignTransaction FK CampaignMain, именно так мне нужно, чтобы они были структурированы.

Вот что я не могу понять: мне нужна страница администратора, показывающая CampaignMonitor с CampaignTransaction в виде строк. Но когда я пытаюсь это сделать, я получаю «ошибка нет fk в CampaignTransaction, указывающая на CampaignMonitor»

Есть ли способ «принудительно» установить отношения только для страницы администратора? Или есть общий параметр FK? Я видел кое-что в contrib / contenttypes, но, похоже, это не то, что мне нужно. Или мне придется таким образом создавать пользовательский раздел администратора для двух моделей?

Как всегда, совет приветствуется.

imanc

Ответ №1:

Вместо OneToOneField вы можете использовать наследование нескольких таблиц, которое реализовано с использованием отношения «один к одному» shinp:

 class CampaignMonitor(CampaignMain): 
    ...
  

Теперь измените администратора CampaignMonitor так, как это необходимо для ваших нужд.