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
:
답변 해 주셔서 감사합니다. 그것은 물론 내가 질문 한 질문에 대답하지만, 반성 할 때 나는 잘못된 질문을했다는 것을 깨달았다. 나는 문제 공간 [여기] [1]을 설명하기위한 또 다른 시도를했다. 건배. [1] : http://stackoverflow.com/questions/1291889/is-a-many-to-many-relationship-with-extra-fields-the-right-tool-for-my-job – whichhand
수업 # 2 : 주석은 마크 업을 허용하지 않습니다. – whichhand