Los documentos Django dan this ejemplo de asociación de datos extra con una relación M2M. Aunque eso es sencillo, ahora que trato de utilizar los datos adicionales en mi opinión, me siento muy torpe (lo que generalmente significa "lo estoy haciendo mal").Usando los "campos adicionales" de las relaciones many-to-many de django con campos adicionales
Por ejemplo, el uso de los modelos definidos en el documento vinculado anteriormente que pueda hacer lo siguiente:
# 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.")
Ahora si quiero imprimir una tabla sencilla que por cada persona que da la fecha de unión a cada banda , en el momento que estoy haciendo esto:
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 ""
que se siente muy feo, especialmente el "m = person.membership_set.get (grupo = band.pk)" bits. ¿Estoy haciendo todo esto mal?
Ahora digo que quería ordenar a las personas para la fecha en que se unieron a una banda en particular (digamos los beatles) ¿hay alguna cláusula order_by que pueda poner en Person.objects.all() que me permita hacerlo?
Cualquier consejo sería muy apreciado.
Gracias por su respuesta. Por supuesto, responde la pregunta que hice, pero al reflexionar, me di cuenta de que hice una pregunta incorrecta. Tuve otro intento de explicar el espacio problemático [aquí] [1]. Aclamaciones. [1]: http://stackoverflow.com/questions/1291889/is-a-many-to- many-relationship-with-extra-fields-the-right-tool-for-my-job – whichhand
Lesson # 2: los comentarios no aceptan marcado. – whichhand