2013-10-30 14 views
5

In meinem Django Projekt habe ich ein Profil für jeden django Benutzer, und das Profil ist mit einem Info Modell verbunden. Beide Beziehungen sind OneToOne. Da ich die meiste Zeit sowohl das Profil als auch die Info-Modelle für einen Benutzer verwende, möchte ich, dass diese standardmäßig ausgewählt werden, damit ich nicht erneut auf die Datenbank stoße. Gibt es eine Möglichkeit, dies mit Django-Authentifizierung zu tun?Automatisch für OneToOne Feld

Antwort

0

Verwenden Sie django> = 1.5 für benutzerdefiniertes Benutzermodell, wählen Sie verwandte Funktionen.

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

Ich weiß, das ist für eine Weile hier gewesen, aber ich bin Zugabe Gesichter meiner Lösung, falls jemand anderes eine ähnliche Situation. Django (ab v1.8 und sogar v1.7) können Sie maßgeschneiderte die Manager (.objects verwendet bei der Abfrage)

Sie einen Manager wie dies für Profil haben könnte:

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

dann im Modell:

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

# your fields ... 

# the manager 
objects = ProfileManager() 

# ... 

dann werden alle Ihre Anfragen auf Profil werden den dazugehörigen Benutzer auch automatisch auswählen. Sie könnten diesen Code erweitern, um das Modell Info auch zu enthalten.

Viel Glück!

Verwandte Themen