2012-02-24 20 views
5

So che normalmente Django creerebbe una chiave esterna chiamata user_id se ho semplicemente fare qualcosa di simileDjango: Come avere un più chiavi esterne riferimento allo stesso tavolo in una tabella

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() 

ma cosa succede se ho bisogno di tre chiave esterna distinta in Order che punta a User? Le tre chiavi esterne sarebbero user_created, user_modified e user_status.

+0

Possibile duplicato di [Come posso avere due chiavi esterne per lo stesso modello in Django?] (Https://stackoverflow.com/questions/543377/how-can-i-have-two-foreign-keys-to -the-same-model-in-django) –

risposta

13

La soluzione è in realtà semplice:

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') 

Hai solo bisogno di definire separati related_name s per evitare ambiguità quando si accede l'Ordine dall'oggetto utente.

+0

Ok, quindi il tuo 'utente' in questo caso sarebbe' user_status'? C'è un motivo per cui non usi 'related_name' per il primo? – hobbes3

+0

Il primo prende il nome correlato predefinito ed è accessibile tramite 'user.order_set' - ovviamente, si può anche assegnare un nome correlato personalizzato qui. – alex

+0

... e sì, il primo sarebbe user_status - l'ho trascurato nel tuo post e ho aggiornato la mia risposta – alex

Problemi correlati