我需要制作一个智能菜单,为此我需要一个 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
如何在数据库中建立这种关系?我正在考虑将 health_plans
(a,b) 作为列,将医生作为行,用 0 和 1 来标识他们承保的 health_plans。
有人告诉我这是对 ManyToManyField
的误用,我不知道该采取什么步骤。
感谢帮助
最佳答案
将 health_plans
列为列的方法不一定是错误的,但它意味着您拥有固定数量的健康计划并且永远不会添加新计划。
关系数据库中多对多关系的传统做法是在中间引入一个表。该表将仅包含医生和健康计划之间的关联。
如果您有一个包含以下内容的 Doctor
表:
id name
1 foo
2 bar
还有一个HealthPlan
表:
id model
1 a
2 b
然后您添加一个表Doctor_HealthPlan
,如下所示:
doctor_id healthplan_id
1 2
2 1
2 2
django 中的ManyToMany
字段类型会自动为你创建这个表。您的代码是正确的,但您可能应该将 hp_id
重命名为 health_plans
之类的名称,因为它是允许您访问与医生关联的健康计划列表的代理。
关于python - Django 多对多字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16360205/