2010-12-14 18 views
47

Quiero almacenar algo de información adicional en eso, creado automáticamente, ManyToMany join-table. ¿Cómo haría eso en Django?Relación ManyToMany de Django con campos adicionales

En mi caso tengo dos tablas: "Empleados" y "Proyectos". Lo que quiero almacenar es cuánto recibe cada uno de los empleados por hora de trabajo en cada uno de los proyectos, ya que esos valores no son los mismos. Entonces, ¿cómo haría eso?

Lo que se me ocurrió fue, en lugar del método "ManyToManyField", crear explícitamente una tercera clase/tabla para almacenar esas nuevas informaciones y establecer su relación con "Empleados" y "Proyectos" utilizando el método "ForeignKey" . Estoy bastante seguro de que funcionará, pero ¿es este el mejor enfoque?

+2

duplicado posible de [Cómo agregar columna en ManyToMany Tabla (Django)] (http://stackoverflow.com/questions/12567151/how-to-add-column-in-manytomany-table-django) – ravi404

+0

@ravz ¿Por qué no debería cerrarse uno como una estafa de este? – TylerH

+0

@TylerH esta es una publicación anterior. Sin embargo, ambas preguntas tienen respuestas, sugiero fusionarlas. – ravi404

Respuesta

69

Aquí es ejemplo de lo que quiere lograr:

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

En enlace caso nunca se rompe:

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

¿Cómo puedo acceder a la fecha_unificada en una plantilla? Group.date_joined no funciona. – Timo

+0

La fecha de grupo unida no funcionará, porque el propio grupo no se une a nada. En cambio, puede obtener sus miembros y obtener su tiempo de unión. para miembro en group.members.all(): – gruszczy

+1

¿Cómo puedo usar group.members.add() con el enfoque anterior? – Dejell

Cuestiones relacionadas