2012-03-30 5 views
1

Die UserProfile hat eine Eins-zu-Eins-zu ‚User‘ und einer viele-zu-eins zu PlaceWie folgt eine Beziehung rückwärts von einem M2O zu O2O?

class UserProfile(models.Model) : 
    user = models.OneToOneField(User) 
    place = models.ForeignKey(Place, null = True, blank = True) 

In meinem der Detailansicht Place, ich will alle aufzulisten die Bewohner für das Place. Mit anderen Worten möchte ich alle User s auflisten, deren UserProfile den angegebenen Place hatte.

In meiner Vorlage, habe ich versucht,

{% for resident in place.user_profile_set.user_set.all %} 

Aber das hat nicht funktioniert. Ich denke, ich vermisse etwas grundlegend in Djangos Konzept von "following a relationship backwards"?

+2

Nette Idee ist zu verwenden [related_name] (https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey.related_name) – DrTyrsa

+0

Es kann schwierig sein, anylize Ihre Abfragen (Laufzeit), wenn Sie ein großes Projekt mit vielen Vorlagen und .py Quellcode haben. – sergzach

Antwort

3

Sie sind zwei Dinge fehlen, ja.

Die erste ist, dass die Rückwärtsrelation von Place zu UserProfileuserprofile_set ist, nicht user_profile_set.

Die zweite ist, dass von dort bis User ist überhaupt keine Rückwärtsbeziehung: es ist vorwärts, weil der FK auf dem UserProfile Modell definiert ist. Also von UserProfile bis User, Sie tun einfach .user - und es ist ein einzelnes Element, kein Queryset.

Also, wie Pastylegs sagt, iterieren Sie durch die Profile in place.userprofile_set.all und tun profile.user.

+0

Duh, richtig. 'UserProfile' zu' User' ist vorwärts haha. Danke für die ausführliche Erklärung! – hobbes3

3

Was ist so etwas wie die folgenden:

{% for resident in place.userprofile_set.all %} 
    {{ resident.user }} 
{% endfor %} 
Verwandte Themen