2013-10-30 15 views
5

Nel mio progetto Django ho un profilo per ogni utente django e il profilo è correlato a un modello Info. Entrambe le relazioni sono OneToOne. Poiché per la maggior parte del tempo sto utilizzando sia il profilo che i modelli Info per un utente, vorrei che fossero selezionati per impostazione predefinita in modo da non colpire nuovamente il database. C'è un modo per farlo usando l'autenticazione Django?Seleziona automaticamente correlato per il campo OneToOne

risposta

0

Utilizzare django> = 1,5 per il modello utente personalizzato utilizzare selezionare funzionalità correlate.

user = User.objects.select_related('profile_related', 'info_related') 
0

So che questo è stato qui per un po ', ma sto aggiungendo la mia soluzione nel caso in cui qualcun altro affronta una situazione simile. Django (come di v1.8 e anche v1.7) consente di personalizzati gestori (.objects utilizzati durante l'esecuzione di query)

si potrebbe avere un manager come questo per il profilo:

class ProfileManager(models.Manager): 
    # use_for_related_fields = True 
    def get_queryset(self): 
     return super(ProfileManager, self).get_queryset().select_related('user') 

poi nel modello:

class Profile(models.Model): 
user = models.OneToOneField(
    User, 
    primary_key=True, 
    on_delete=models.CASCADE 
    ) 

# your fields ... 

# the manager 
objects = ProfileManager() 

# ... 

poi tutte le vostre domande su Profilo seleziona automaticamente il relativo utente troppo. È possibile estendere questo codice per includere anche il modello Info.

Buona fortuna!