是否可以在Django上为子模型添加'through'模型?

时间:2012-07-30 17:45:44

标签: django inheritance model

以下是我要做的事情的简要示例:

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,它是{{1}的孩子}。当我尝试在Entity模型上创建直通关系时,它不起作用。我收到错误:

  

'staff'是通过模型Role手动定义的m2m关系,它没有Individual和BookingAgent的外键

但是当在Entity`模型中定义直通关系时,它会起作用。

我的目标是让每个实体都有一份员工或成员的个人列表。我想我明白为什么它不起作用,但我无法找到一个优雅的解决方案。

谢谢!

更新:澄清一下,实体不是抽象基类,因为会有一些实体不是BookingAgents,ManagementCompanies等

1 个答案:

答案 0 :(得分:0)

我认为您需要将“RoleTest”更改为“Role”,并且您需要拥有BookingAgent的外键,而不是Entity(并且不应该Entity是一个摘要基类?)

class BookingAgent(Entity)
    staff = models.ManyToManyField(Individual, through='Role', related_name="employee")

class Role(models.Model):
    person = models.ForeignKey(Individual)
    company = models.ForeignKey(BookingAgent)