如何追随从M2O到O2O的关系?

时间:2012-03-30 10:30:29

标签: python django django-models django-templates

UserProfile与'用户'一对一,与Place多对一

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

Place的详细视图中,我想列出Place的所有居民。换句话说,我想列出User具有指定UserProfile的所有Place个。

在我的模板中,我尝试了

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

但那没用。我想我在Django的"following a relationship backwards"概念中基本上缺少一些东西?

2 个答案:

答案 0 :(得分:3)

如下所示:

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

答案 1 :(得分:3)

你错过了两件事,是的。

首先,从PlaceUserProfile的向后关系是userprofile_set,而不是user_profile_set

第二个是从那里到User根本不是向后关系:它是向前的,因为FK是在UserProfile模型上定义的。因此,从UserProfileUser,您只需执行.user - 它是单个元素,而不是查询集。

所以,正如pastylegs所说,你遍历place.userprofile_set.all中的个人资料并执行profile.user