首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于Django的自定义用户模型的DetailView不工作

基于Django的自定义用户模型的DetailView不工作
EN

Stack Overflow用户
提问于 2019-03-25 16:17:30
回答 3查看 366关注 0票数 0

我在我的网站上有一个“我的帐户”的链接。

代码语言:javascript
运行
复制
      {% if user.is_authenticated %}
          <a class="nav-link" href="{% url 'user_detail' id=request.user.id %}">My Account</a>
      {% endif%}

在我的urls.py上,我有这一行

代码语言:javascript
运行
复制
url(r'^users/(?P<id>\d+)$', views.UserDetailView.as_view(), name='user_detail'),

views.py

代码语言:javascript
运行
复制
class UserDetailView(DetailView):
   context_object_name = 'es_user'
   model = es_user

models.py

代码语言:javascript
运行
复制
class es_user(models.Model):
   user = models.OneToOneField(User,related_name='es_user', on_delete=models.CASCADE)
   def get_absolute_url(self):
       print("self.user.id=",self.user.id)
       return reverse('user_detail', kwargs={'id': self.user.id })

但是当我点击'My account‘链接时,我会得到这个错误

代码语言:javascript
运行
复制
AttributeError at /users/3

Generic detail view UserDetailView must be called with either an object pk or a slug in the URLconf.

这里3是当前登录用户的id,因为用户登录在这一行的request.user.id中,<a class="nav-link" href="{% url 'user_detail' id=request.user.id %}">My Account</a>不返回任何空值。

我无法使用django提供的错误消息找到错误。谁来帮帮我

EN

回答 3

Stack Overflow用户

发布于 2019-03-25 16:22:51

默认情况下,DetailView的URL模式查找一个名为pk的ID字段。

您可以将您的URL模式更改为:url(r'^users/(?P<pk>\d+)$', views.UserDetailView.as_view(), name='user_detail'),

...or将类上的pk_url_kwarg设置为:

代码语言:javascript
运行
复制
class UserDetailView(DetailView):
   context_object_name = 'es_user'
   model = es_user
   pk_url_kwarg = 'id'
票数 0
EN

Stack Overflow用户

发布于 2019-03-25 16:25:05

来自django文件:

链接:https://docs.djangoproject.com/en/2.1/topics/class-based-views/generic-display/

这里的URLconf使用命名组pk -这个名称是默认名称,>DetailView用于查找用于筛选查询集的主键的值。 如果您想要将组称为其他东西,可以在>视图上设置pk_url_kwarg。更多细节可在DetailView参考资料中找到。

票数 0
EN

Stack Overflow用户

发布于 2019-03-25 17:23:36

我做了以下的改变,现在一切都很好!

views.py

代码语言:javascript
运行
复制
class UserDetailView(DetailView):
    context_object_name = 'es_user'
    model = es_user
    pk_url_kwarg = 'id'

在主页中,指向“My account”的链接更改为

代码语言:javascript
运行
复制
{% if user.is_authenticated %}
       <a class="nav-link" href="{% url 'user_detail' id=request.user.es_user.id %}">My Account</a>
{% endif%}

models.py

代码语言:javascript
运行
复制
class es_user(models.Model):
   user = models.OneToOneField(User,related_name='es_user', on_delete=models.CASCADE)
   def get_absolute_url(self):
       return reverse('user_detail', kwargs={'id': self.pk })
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55342153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档