web-dev-qa-db-fra.com

La relation ManyToMany de Django avec des champs supplémentaires

Je souhaite stocker des informations supplémentaires dans cette table de jointure ManyToMany créée automatiquement. Comment ferais-je cela à Django?

Dans mon cas, j'ai deux tableaux: "Employés" et "Projets". Ce que je veux stocker, c'est combien chacun des employés reçoit par heure de travail dans chacun des projets, car ces valeurs ne sont pas les mêmes. Alors, comment pourrais-je faire ça?

Ce qui m'est venu à l'esprit était de, au lieu de la méthode "ManyToManyField", créer explicitement une troisième classe/table pour stocker ces nouvelles informations et définir sa relation avec "Employés" et "Projets" en utilisant la méthode "ForeignKey". Je suis sûr que cela fonctionnera, mais est-ce la meilleure approche?

58
Rodrogo

Voici un exemple de ce que vous souhaitez réaliser:

http://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships

En cas de rupture du lien:

from Django.db import models

class Person(models.Model):
    name = models.CharField(max_length=128)

    def __str__(self):              # __unicode__ on Python 2
        return self.name

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(Person, through='Membership')

    def __str__(self):              # __unicode__ on Python 2
        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)
87
gruszczy