De la documentation Django ...Comment puis-je accéder aux propriétés d'une table "through" many-to-many à partir d'un template django?
Lorsque vous ne traiter qu'avec des simples nombreux à plusieurs relations telles que le mélange et l'appariement des pizzas et des garnitures, un ManyToManyField type est tout ce dont vous avez besoin. Cependant, vous devrez parfois associer des données à la relation entre deux modèles. Par exemple, considérons le cas d'une application qui suit les groupes musicaux auxquels appartiennent les musiciens. Il existe une relation plusieurs-à-plusieurs entre une personne et les groupes dont elle est membre, vous pouvez donc utiliser ManyToManyField pour représenter cette relation. Cependant, il y a beaucoup de détails sur les membres que vous pourriez vouloir collecter, comme la date à laquelle la personne a rejoint le groupe. Pour ces situations, Django vous permet de spécifier le modèle qui sera utilisé pour gérer la relation plusieurs-à-plusieurs. Vous pouvez ensuite placer des champs supplémentaires sur le modèle intermédiaire. Le modèle intermédiaire est associé à ManyToManyField en utilisant l'argument through pour pointer vers le modèle qui servira d'intermédiaire. Pour notre exemple musicien, le code ressemblerait à quelque chose comme ceci:
class Person(models.Model):
name = models.CharField(max_length=128)
def __unicode__(self):
return self.name
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')
def __unicode__(self):
return self.name
class Membership(models.Model):
person = models.ForeignKey(Person)
group = models.ForeignKey(Group)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
Maintenant que vous avez configuré votre ManyToManyField utiliser votre modèle intermédiaire (d'adhésion, dans ce cas), vous êtes prêt à commencer à créer des relations plusieurs-à-plusieurs. Vous faites cela en créant des instances du modèle intermédiaire:
ringo = Person.objects.create(name="Ringo Starr")
paul = Person.objects.create(name="Paul McCartney")
beatles = Group.objects.create(name="The Beatles")
m1 = Membership(person=ringo, group=beatles,
... date_joined=date(1962, 8, 16),
... invite_reason= "Needed a new drummer.")
m1.save()
beatles.members.all()
[<Person: Ringo Starr>]
ringo.group_set.all()
[<Group: The Beatles>]
m2 = Membership.objects.create(person=paul, group=beatles,
... date_joined=date(1960, 8, 1),
... invite_reason= "Wanted to form a band.")
beatles.members.all()
[<Person: Ringo Starr>, <Person: Paul McCartney>]
source: http://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany
Ma question est, comment puis-je configurer mon point de vue et le modèle pour accéder à ces attributs supplémentaires. Dites que j'ai une page de groupe et que je veux afficher le nom du groupe, parcourir les dossiers d'adhésion et les noms d'affichage et date_joint.
Devrais-je transmettre un objet bande au modèle? Ou est-ce que je passe les objets d'adhésion en quelque sorte?
Et comment créer les boucles for dans le modèle?
Merci.
Je considérerais raccourcissant des extraits de documents django un peu. Les personnes susceptibles de répondre sont probablement déjà familières avec elles et il serait plus facile de repérer une question réelle de cette façon. – cji