【问题标题】:Django smart/chained select manytomanyfieldDjango smart/chained select manytomanyfield
【发布时间】:2013-05-02 18:16:42
【问题描述】:

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

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

最重要的是:关系专业/健康计划的智能选择。 用户选择专业。 该专业由一名或多名医生负责。 我使用那些医生 ID,然后去检查 health_plan 表,那里有可用的计划。 用户选择的计划。

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

我希望我说清楚了。

【问题讨论】:

    标签: python django forms


    【解决方案1】:

    您所描述的是对多对多关系的滥用。 如果您想在 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 实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-10
      • 2012-01-12
      • 2011-12-24
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多