2013-05-02 66 views
0

这里是这笔交易,这是我的模型:Django的智能/链接选择manytomanyfield

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

class Doctors_list(models.Model): 

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

    def __unicode__(self): 
     return self.name 

所以,我有一个名为Doctors_list表,医生有一个特色,一个地方,一个名字和一个列表涵盖的健康计划。

为了管理这一点,我有一个表与列(a,b,c)上的健康计划。医生通过他们的ID在此列表中被识别,并且行包含1或0,1用于覆盖健康计划,0表示未覆盖。像这样:

ID A B C 
1 0 0 1 
2 1 0 0 
3 1 0 1 

有没有更好的方法来使这种关系?

用户首先选择的专业,我的表格:

class SpecForm(ModelForm): 
    a = Doctors_list.objects.values_list('specialty', flat=True) 
    unique = [('---------------','---------------')] + [(i,i) for i in set(a)] 
    specialty = forms.ChoiceField(choices=unique) 
    class Meta: 
     model = Doctors_list 

最重要的事情是:一个聪明的选择了关系专业/ health_plans。 用户选择专业。 专业由一名或多名医生覆盖。 我使用这些医生的身份证,并去检查health_plan表有什么计划可用。 用户选择的计划。

我会继续研究,但任何提示都会受到欢迎。

我希望我自己清楚。

回答

1

你所描述的是滥用ManyToMany关系。 如果你想创建A和B之间的多对多关系,你只需要在其中一个模型(A或B)的定义中添加一个ManyToMany字段,而django将负责其余部分。具体来说,它将创建一个第三个表格,它将以(A.id,B.id)的形式存储关联。这是这种类型关系的标准理性数据库过程,Django正在实施它。

查看http://en.wikipedia.org/wiki/Junction_table了解多对多关系的一般定义。

https://docs.djangoproject.com/en/1.5/ref/models/fields/#manytomanyfield - 用于Django实现。