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 に答える