0

これが契約です、これは私のモデルです:

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 という名前のテーブルがあり、医師には 1 つの専門分野、1 つの場所、1 つの名前、および対象となる健康計画のリストがあります。

これを管理するために、列 (a、b、c) に健康計画を含むテーブルがあります。医師はこのリストで ID によって識別され、行には 1 または 0 が含まれます。1 は健康保険の対象、0 は対象外です。このような:

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

この関係を作るためのより良い方法はありますか???

ユーザーは最初に専門分野である my form を選択します。

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

重要なのは、専門分野/健康計画の関係をスマートに選択することです。ユーザーは専門分野を選択します。専門分野は、1 人以上の医師によってカバーされています。私はそれらの医師の ID を使用し、利用可能なプランがある health_plan テーブルをチェックします。ユーザーが選択するプランです。

私は研究を続けますが、どんなヒントでも大歓迎です。

私は自分自身を明確にしたことを願っています。

4

1 に答える 1

1

あなたが説明しているのは、ManyToMany 関係の誤用です。A と B の間に多対多の関係を作成したい場合は、モデルの 1 つ (A または B) の定義に ManyToMany フィールドを追加するだけで、あとは django が処理します。具体的には、関連付けを (A.id, B.id) の形式で格納する 3 番目のテーブルを作成します。これは、このタイプのリレーションに対する標準的な合理的なデータベース プロシージャであり、Django はそれを実装しています。

多対多の関係の一般的な定義については、http://en.wikipedia.org/wiki/Junction_tableを参照してください。

https://docs.djangoproject.com/en/1.5/ref/models/fields/#manytomanyfield - Django 実装用。

于 2013-05-02T20:50:22.397 に答える