2012-02-24 29 views
5

sé que normalmente Django crearía una clave externa llamada user_id si simplemente hacer algo comoDjango: cómo tener una varias claves externas hace referencia a la misma tabla en una tabla

from django.db import models 

class Order(models.Model): 
    user = models.ForeignKey(User) 
    comments = models.CharField(max_length=400) 
    date_created = models.DateTimeField('created date') 

class User(models.Model): 
    name = models.CharField(max_length=200) 
    age = models.IntegerField() 

pero lo que si necesito tres clave foránea distinta en Order que todos apuntan a User? Las tres claves externas serían user_created, user_modified y user_status.

+0

Posible duplicado de [¿Cómo puedo tener dos claves foráneas para el mismo modelo en Django?] (Https://stackoverflow.com/questions/543377/how-can-i-have-two-foreign-keys-to -el-mismo-modelo-en-django) –

Respuesta

13

La solución es realmente sencillo:

class Order(models.Model): 
    user_status = models.ForeignKey(User, related_name = 'orders_status') 
    user_created = models.ForeignKey(User, related_name = 'orders_created') 
    user_modified = models.ForeignKey(User, related_name = 'orders_modified') 

sólo tiene que definir por separado related_name s para evitar la ambigüedad cuando se accede a la Orden del objeto de usuario.

+0

Ok, entonces su 'usuario' en este caso sería' user_status'? ¿Hay algún motivo por el que no uses 'related_name' para el primero? – hobbes3

+0

El primero toma el nombre relacionado predeterminado y se accede a través de 'user.order_set'; por supuesto, también se podría asignar un nombre relacionado personalizado aquí. – alex

+0

... y sí, el primero sería user_status - lo pasé por alto en su publicación y actualicé mi respuesta – alex

Cuestiones relacionadas