0

これが私がやろうとしていることの凝縮された例です:

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」は、モデル Role を介して手動で定義された m2m リレーションであり、Individual および BookingAgent への外部キーはありません

ただし、Entity` モデルでスルー リレーションシップが定義されている場合は機能します。

私の目標は、各エンティティに、従業員またはメンバーである個人のリストを持たせることです。なぜうまくいかないのか理解できたと思いますが、エレガントな解決策がわかりません。

ありがとう!

更新: 明確にするために、エンティティは、BookingAgents、ManagementCompanies などではないいくつかのエンティティがあるため、抽象基本クラスではありません。

4

1 に答える 1

0

「RoleTest」を「Role」に変更する必要があり、への外部キーが必要だと思います(抽象基本クラスであってはなりませんBookingAgentか?)EntityEntity

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

class Role(models.Model):
    person = models.ForeignKey(Individual)
    company = models.ForeignKey(BookingAgent)
于 2012-07-30T17:47:57.817 に答える