2010-12-14 1 views
47

Ich möchte einige zusätzliche Informationen in der automatisch erstellten ManyToMany-Join-Tabelle speichern. Wie würde ich das in Django machen?Djangos ManyToMany-Beziehung mit zusätzlichen Feldern

In meinem Fall habe ich zwei Tabellen: "Mitarbeiter" und "Projekte". Was ich speichern möchte ist, wie viel jeder der Mitarbeiter pro Arbeitsstunde in jedem Projekt erhält, da diese Werte nicht gleich sind. Also, wie würde ich das tun?

Was mir in den Sinn kam, war, anstelle der Methode "ManyToManyField" explizit eine dritte Klasse/Tabelle zu erstellen, um diese neuen Informationen zu speichern und mit der "ForeignKey" -Methode die Beziehung zu "Employees" und "Projects" zu setzen . Ich bin mir ziemlich sicher, dass es funktionieren wird, aber ist das der beste Ansatz? Hier

+2

Mögliche Duplikat [So fügen Sie Spalte in ManyToMany Table (Django)] (http://stackoverflow.com/questions/12567151/how-to-add-column-in-manytomany-table-django) – ravi404

+0

@ravz Warum sollte das nicht als ein Betrogen von diesem stattdessen geschlossen werden? – TylerH

+0

@TylerH dies ist ein älterer Beitrag. Beide Fragen haben jedoch eine Antwort, ich würde vorschlagen, diese zusammenzufassen. – ravi404

Antwort

69

ist Beispiel dafür, was Sie erreichen wollen:

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

Bei Link jemals bricht:

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) 
+0

Wie kann ich auf das Date_joined in einer Vorlage zugreifen? Group.date_joined funktioniert nicht. – Timo

+0

Das Gruppendatum wird nicht funktionieren, da die Gruppe selbst nichts verbindet. Stattdessen können Sie ihre Mitglieder erhalten und ihre Beitrittszeit erhalten. Für Mitglieder in group.members.all(): – gruszczy

+1

Wie kann ich group.members.add() mit dem obigen Ansatz verwenden? – Dejell

Verwandte Themen