2

我正在尝试创建由计划提供者订购的医生接受的保险计划列表。如何构造一个查询,使我能够生成如下结果列表:

Provider 1
  Plan A
  Plan B
  Plan C
Provider 2
  Plan D
Provider 3
  Plan E
  Plan F

给定以下(简化的)模型:

class Provider(models.Model):
    name = models.CharField(_('Name'), max_length=50)

class Plan(models.Model):
    name = models.CharField(_('Name'), max_length=50)
    provider = models.ForeignKey(Provider)

class DoctorProfile(UserProfile):
    accepted_insurance_plans = models.ManyToManyField(Plan, blank=True)
4

1 回答 1

2

假设您正在寻求为给定的 DoctorProfile 生成此列表,dp:

import itertools
import operator

plans = Plan.objects.filter(doctorprofile=dp).\
           order_by("provider").select_related("provider")
provider_plans = itertools.groupby(plans, operator.attrgetter("provider"))

然后,您可以遍历按提供者分组的计划,如下所示:

for provider, plan_group in provider_plans:
    print provider.name
    for plan in plan_group
        print "  %s"%plan.name

免责声明:我没有测试过这段代码

于 2012-06-24T04:05:58.657 回答