2012-03-30 3 views
1

UserProfileは、「ユーザー」に1対1を持ち、多対一Placeの私の詳細ビューでPlaceM2OからO2Oまで逆の関係に従うにはどうすればいいですか?

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

に、私はそれのためにすべての住民を一覧表示したいですPlace。つまり、Userのすべてをリストしたいと思います。にはPlaceが指定されています。私のテンプレートで

は、私が

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

を試してみましたしかし、それは動作しませんでした。私は基本的にDjangoのコンセプトである"following a relationship backwards"を見逃していると思いますか?

+2

[related_name](https://docs.djangoproject.com/ja/dev/ref/models/fields/#django.db.models.ForeignKey.related_name)を使用することをお勧めします。 – DrTyrsa

+0

これは、多数のテンプレートと.pyソースコードを持つ大規模プロジェクトがある場合は、クエリ(実行時間) Duh、右。 – sergzach

答えて

3

あなたははい、二つのことを逃しています。

最初はUserProfileからPlaceから後方関係がuserprofile_set、ないuser_profile_setということです。

ここからUserまでは後方関係ではありません.FKはモデルで定義されているため、転送されます。したがって、からUserまでは、.userとなります。これはクエリーセットではなく、単一の要素です。

したがって、pastylegsによれば、place.userprofile_set.allのプロファイルを繰り返し、profile.userを実行します。

+0

。 'UserProfile'から' User'へは前方のhahaです。詳細な説明をありがとう! – hobbes3

3

次のようなものについてはどう:

{% for resident in place.userprofile_set.all %} 
    {{ resident.user }} 
{% endfor %} 
関連する問題