Python 如何在映射django模型时使用多个外键

Python 如何在映射django模型时使用多个外键,python,mysql,django,database-design,sqlalchemy,Python,Mysql,Django,Database Design,Sqlalchemy,我有一个约会、一个人和一个办公室模型。我知道使用FOREIGN_KEY.to_字段来匹配pk以外的内容,但我如何使其与office_id匹配呢?我使用的是mysql,希望尽量减少架构上的更改 换句话说,如果我需要appointment.person,那么它应该返回拥有person.office=office.office\u id的appointment.person 我相信这是关于django中的复合键,这是由ORM提供的。有一个叫做的东西,我可能可以使用,但仍然不确定如何使用 class

我有一个约会、一个人和一个办公室模型。我知道使用FOREIGN_KEY.to_字段来匹配pk以外的内容,但我如何使其与office_id匹配呢?我使用的是mysql,希望尽量减少架构上的更改

换句话说,如果我需要appointment.person,那么它应该返回拥有person.office=office.office\u id的appointment.person

我相信这是关于django中的复合键,这是由ORM提供的。有一个叫做的东西,我可能可以使用,但仍然不确定如何使用

class Person(models.Model):
    person_id    = models.IntegerField() # not pk
    office       = models.ForeignKey(Office)

class Appointment(models.Model):
    appointment_id    = models.IntegerField() # not pk
    office            = models.ForeignKey(Office)
    person            = models.ForeignKey(Person)

class Office(models.Model):
    # mystuff here

为什么在个人模型中使用person_id和pk,在办公室模型中使用pk和office_id?我会这样做:

class Office(models.Model):
    # office stuff here

class Person(models.Model):
    office = models.ForeignKey(Office)

class Apointment(models.Model):
    person = models.ForeignKey(Person)
    office = models.ForeignKey(Office)

由于django自动为每个模型生成pk,我看不出有理由添加这些_id字段。

感谢您的回复-您是对的。这是我画的一个错误,你提到的是我是怎么画的。。绘图更新。嗯,我想你只需要在一个点类中将字段person改为:person=models。ForeignKey(person,to_field='person\u id')我从未使用过,但我在这里找到了它:你引用的唯一组合只是在两个字段之间创建一个唯一的键。你的最终目标是什么?是否要限制创建
约会
让来自不同办公室的人员参与约会?然后想想如果有人换了办公室会发生什么?我相信你不想改变过去任命的职位。如果您不想跟踪约会的地点,那么您可以从中删除office FK,您有该人员,所以您有将要进行约会的办公室?或者您想进行一个查询,该查询只过滤人事办公室中的约会?