Django模型ManyToMany id范例

时间:2013-05-01 22:28:41

标签: django model many-to-many relation paradigms

我是Django的新手,我无法理解model.ManyToMany的工作原理。 我有这个模型:

from django.db import models

class Health_plan(models.Model):
    a = models.IntegerField ()
    b = models.IntegerField ()

class Doctors_list(models.Model):

    name = models.CharField(max_length=30)
    hp_id = models.ManyToManyField(Health_plan)

    def __unicode__(self):
        return self.name

医生有一份健康计划的名称和清单。 N医生可以拥有健康计划。我认为这是一个N:N的关系,所以我使用ManyToMany来建立关系。

问题在于此代码生成3个表。 Health_plan,Doctors_list和hp_id。有什么意义?我可以通过它的身份识别医生,并将其与健康计划的ID相匹配。

健康计划表在此示例中包含计划ab,默认情况下为ID。 Doctor id = 5将在Health_plan表格中(1 for true, 0 for false)的行上标记为1 id = 5的计划。

我应该使用其他型号吗?提示?

1 个答案:

答案 0 :(得分:1)

任何多对多关系,不仅仅是在Django中,都需要一个链接表。

你说“我可以通过其ID来识别医生,并将其与健康计划的ID相匹配” - 嗯,这正是链接表的作用。这些数据还会在哪里发生?正如你所说,每个医生都有很多计划,每个计划都有很多医生。因此,无需将数据存储在医生一侧或计划方面,因为您需要许多条目。链接表通过为每位医生提供了许多条目,并为每个计划提供了许多条目,但每个医生+计划的组合只有一个条目。