Les documents Django donnent this exemple d'association de données supplémentaires avec une relation M2M. Bien que ce soit simple, maintenant que j'essaie d'utiliser les données supplémentaires de mon point de vue, je me sens très maladroit (ce qui signifie en général «Je me trompe»).Utilisation des "champs supplémentaires" de django relations plusieurs-à-plusieurs avec des champs supplémentaires
Par exemple, en utilisant les modèles définis dans le document lié ci-dessus, je peux faire ce qui suit:
# 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.")
Maintenant, si je veux imprimer un tableau simple que pour chaque personne donne la date à laquelle ils ont rejoint chaque bande , au moment où je fais ceci:
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 ""
qui se sent très laid, en particulier le "m = person.membership_set.get (groupe = band.pk)" bit. Est-ce que je vais à propos de toute cette affaire? Maintenant, disons que je voulais commander les gens à la date à laquelle ils ont rejoint un groupe particulier (disons les beatles) y a-t-il une clause order_by sur Person.objects.all() qui me permettrait de faire ça?
Un conseil serait grandement apprécié.
Merci pour votre réponse. Bien sûr, il répond à la question que j'ai posée, mais après réflexion, j'ai réalisé que je posais la mauvaise question. J'ai eu une autre tentative d'expliquer l'espace problème [ici] [1]. À votre santé. [1]: http://stackoverflow.com/questions/1291889/is-a-many-to-many-relationship-with-extra-fields-the-right-tool-for-my-job – whichhand
Leçon # 2: les commentaires n'acceptent pas le balisage. – whichhand