2009-08-15 13 views
5

Django belgeleri, ek verileri M2M ilişkisi ile ilişkilendirmek için this örneğini verir. Her ne kadar bu ileriye doğru olsa da, şimdi ekstra verilerden faydalanmaya çalıştığım görüşümde çok beceriksiz (ki genellikle yanlış yapıyorum). Ben her kişi için her gruba katıldı tarihini verir basit bir tablo yazdırmak istiyorsanız ŞimdiDjango'dan "ekstra alanları" kullanarak fazla alanlarla çoktan çoğa ilişkilerini kullanma

# 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.") 

: Ben aşağıdakileri yapabilirsiniz yukarıda bağlantılı belgede tanımlanan modeller kullanılarak Örneğin

, şu anda bunu yapıyorum: çok çirkin hissediyor

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 "" 

, özellikle "m = person.membership_set.get (grup = band.pk)" bit. Bu şeyi yanlış mı anlatacağım?

Şimdi insanların belirli bir gruba katıldıkları tarihe kadar sipariş vermek istediğimi söylüyorsun (dedikler var) Person.objects.all() üzerine koyabileceğim herhangi bir order_by maddesi var mı?

Her türlü öneri çok takdir edilecektir. o ORM katılmak yapmak söyler ve bir tek sorguda her şeyi seçer gibi, 1 + n sorunu sorgular önlemek burada select_related kullanma

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 

:

cevap

3

yerine Üyelik modeli sorgulaması gerekir.

+1

Cevabınız için teşekkür ederiz. Tabii ki sorduğum soruya cevap veriyor, ama yansımamda yanlış soruyu sorduğumu farkettim. Problem alanını açıklamak için başka bir girişimde bulundum [burada] [1]. Şerefe. [1]: http://stackoverflow.com/questions/1291889/is-a-many-to-many-relationship-with-extra-fields-the-right-tool-for-my-job – whichhand

+0

Ders # 2: yorumlar işaretlemeyi kabul etmiyor. – whichhand

İlgili konular