2009-08-15 32 views
5

Djangoのドキュメントには、余分なデータをM2Mの関係に関連付ける例があります。それはまっすぐですが、今私は私の意見で余分なデータを利用しようとしているので、それは非常に不器用な感じです(通常は "間違っている"という意味です)。私は一人一人のために、彼らはそれぞれのバンドに参加した日付を与えるという単純な表を印刷したい場合は今djangoの「余分なフィールド」を余分なフィールドとの多対多の関係

# Some people 
ringo = Person.objects.create(name="Ringo Starr") 
paul = Person.objects.create(name="Paul McCartney") 
me = Person.objects.create(name="Me the rock Star") 
# Some bands 
beatles = Group.objects.create(name="The Beatles") 
my_band = Group.objects.create(name="My Imaginary band") 
# The Beatles form 
m1 = Membership.objects.create(person=ringo, group=beatles, 
    date_joined=date(1962, 8, 16), 
    invite_reason= "Needed a new drummer.") 
m2 = Membership.objects.create(person=paul, group=beatles, 
    date_joined=date(1960, 8, 1), 
    invite_reason= "Wanted to form a band.") 
# My Imaginary band forms 
m3 = Membership.objects.create(person=me, group=my_band, 
    date_joined=date(1980, 10, 5), 
    invite_reason= "Want to be a star.") 
m4 = Membership.objects.create(person=paul, group=my_band, 
    date_joined=date(1980, 10, 5), 
    invite_reason= "Wanted to form a better band.") 

:私は次の操作を行うことができます上記のリンクされたドキュメントで定義されたモデルを使用して例えば

、 、現時点では私はこれをやっている:非常に醜い感じ

bands = Group.objects.all().order_by('name') 

for person in Person.objects.all(): 
    print person.name, 
    for band in bands: 
     print band.name, 
     try: 
      m = person.membership_set.get(group=band.pk) 
      print m.date_joined, 
     except: 
      print 'NA', 
    print "" 

を、特に "M = person.membership_set.get(グループ= band.pk)" ビットを。この全部が間違っているのですか?

私はPerson.objects.all()に置くことができるorder_by節が特定のバンド(ビートルズ)に参加した日までに注文したいと言っています。

アドバイスをいただければ幸いです。

答えて

3

あなたが代わりにメンバーシップモデルを問い合わせる必要があります。それは参加して、1つのクエリですべてを選択を行うためにORMを告げるよう

members = Membership.objects.select_related('person', 'group').all().order_by('date_joined') 

for m in members: 
    print m.band.name, m.person.name, m.date_joined 

ここselect_related使用して、私たちは1 + n個を避けるためには、問題を照会します。

+1

あなたの答えをありがとう。それは私が尋ねた質問にはもちろん答えますが、私は間違った質問をしていることに気付きました。私は問題空間[ここ] [1]を説明するために別の試みをしました。乾杯。 [1]:http://stackoverflow.com/questions/1291889/is-a-many-to-many-relationship-with-extra-fields-the-right-tool-for-my-job – whichhand

+0

レッスン# 2:コメントはマークアップを受け付けません。 – whichhand

関連する問題