這裏是什麼,我試圖做一個濃縮的例子:是否有可能在Django上爲子模型添加'through'模型?
class Entity(models.Model):
name = models.CharField(max_length=70)
class Individual(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
class BookingAgent(Entity)
staff = models.ManyToManyField(Individual, through='Role', related_name="employee")
class Role(models.Model):
person = models.ForeignKey(Individual)
company = models.ForeignKey(Entity)
position = models.CharField(max_length=70)
基本上,我有,叫Entity
父類存儲所有的基本信息,公司即地址等,然後我有一個BookingAgent
這是Entity
的孩子。當我嘗試在BookingAgent
模型上創建直通關係時,它不起作用。我得到錯誤:
'staff' is a manually-defined m2m relation through model Role, which does not have foreign keys to Individual and BookingAgent
但它在貫穿關係在實體模型中定義時起作用。
我的目標是讓每個實體都有一個員工或成員的個人名單。我想我明白爲什麼它不起作用,但我無法弄清楚一個優雅的解決方案。
謝謝!
UPDATE:澄清,實體是不是一個抽象基類,因爲會有一些實體是不BookingAgents,ManagementCompanies等
*從技術角度,有什麼不對,你有什麼。如果'BookingAgent'是一個'Entity',那麼你應該可以將它保存到任何接受'Entity'的'ForeignKey'。然而,隨着Django建立M2M API的方式,這將不起作用。爲了使API正常工作,它必須將相關管理者連接到關係的兩個方面,即'Individual'和'BookingAgent',但是你的代碼會讓相關的管理者被添加到'Individual'和'Entity'。你可能會稱這是一個bug,但我想如果你提交了它,Django的開發者會將它標記爲WONTFIX。 – 2012-07-30 18:50:27
謝謝@ChrisPratt!我擡頭看管理人員,但我仍然對如何解決這個問題感到困惑。你能澄清嗎? – 2012-07-30 19:29:22
問題是我認爲你不能解決這個問題。您需要爲每個特定關係使用不同的「直通」模型。 – 2012-07-30 19:47:35