Django智能/链式选择manytomanyfield

时间:2013-05-02 18:16:43

标签: python django forms

这是交易,这是我的模特:

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 个答案:

答案 0 :(得分:1)

您所描述的是滥用ManyToMany关系。 如果你想在A和B之间建立多对多的关系,你所要做的就是在其中一个模型(A或B)的定义中添加一个ManyToMany字段,django将负责其余的事情。具体来说,它将创建一个第3个表,它将以(A.id,B.id)的形式存储关联。这是此类关系的标准合理数据库过程,Django正在实现它。

有关多对多关系的一般定义,请参阅http://en.wikipedia.org/wiki/Junction_table

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