2013-05-02 61 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實現。