基于Django类的视图:如何使用用户名而不是ID来从扩展模型中获取数据

时间:2014-09-14 23:39:34

标签: python django django-models django-views

我有两个模型:UserUserProfile第一个包含usernamefirst_name等字段。第二个包含Django管理员的所有额外字段不提供,但我需要它,如:reputation。我的问题是,如何从两个模型中获取所有数据?

urls.py

from django.conf.urls import patterns, include, url

from userprofiles.views import UserDetailView

urlpatterns = patterns('',
    url(r'^profile/username/(?P<slug>[\w.@+-]+)/$', UserDetailView.as_view()),
)

models.py

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    reputation = models.IntegerField(default=1, null=True)

views.py

from django.views.generic.detail import DetailView
# from .models import UserProfile (This contains custom fields)
from django.contrib.auth.models import User

class UserDetailView(DetailView):
    model = User
    slug_field = 'username'

    def get_template_names(self):
        return 'profile.html'

profile.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Profile</title>
</head>
<body>

<section>
    {{user.username}}<br>
    {{userprofile.reputation}}<br>
</section>
</body>
</html>

此时我访问http://localhost:8000/profile/username/MY_USERNAME/

时,我的profile.html中只收到没有声望的用户名

1 个答案:

答案 0 :(得分:1)

上下文中仅存在User对象。使用反向关系从User模型访问配置文件:

{{ user.userprofile.reputation }}

docs

中的更多信息