2009-08-15 3 views
5

Django 문서는 여분의 데이터를 M2M 관계와 연관시키는 예제를 제공합니다. 그것이 곧바로 앞으로 내보기에서 여분의 데이터를 사용하려고 시도하고 있기 때문에 매우 서투른 느낌입니다 (일반적으로 "나는 잘못하고 있습니다"). 나는 각 사람을 위해 그들이 각 밴드에 합류 날짜를 제공하는 간단한 테이블을 인쇄하려면 지금django의 "추가 필드"사용 여분의 필드가있는 many-to-many 관계

# 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 절이 있습니다.

모든 조언을 주시면 감사하겠습니다. 그것은 ORM이 가입 할 지시 한 단일 쿼리의 모든 선택으로, 우리는 1 + n이 문제를 쿼리하지 않도록 여기 select_related 사용

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 

:

답변

3

는 대신 회원 모델을 조회해야한다.

+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

관련 문제