DetailView中的自定义方法有啥问题

Posted

技术标签:

【中文标题】DetailView中的自定义方法有啥问题【英文标题】:What is wrong with the custom method in DetailViewDetailView中的自定义方法有什么问题 【发布时间】:2014-09-10 10:27:47 【问题描述】:

我正在尝试将 URL 中的 PK 与 request.user.id 进行比较,以便没有人可以查看其他人的个人资料。这可能不是传统的方法,但我仍然想知道我的代码有什么问题。我是新手,请多多包涵。

views.py

class UserDetail(DetailView):
    queryset = Profile.objects.all()
    template_name = 'details.html'

    def get_queryset(self):
        if self.request.user.id != self.kwargs['pk']:
            queryset = Profile.objects.first()
            return queryset
        else:
            return self.queryset

models.py

class Profile(AbstractUser):
    type = models.CharField(max_length=50)

urls.py

url(r'^details/(?P<pk>\d+)/$', login_required(views.UserDetail.as_view())),

当我转到 URL 时:

错误

Exception Type:     AttributeError
Exception Value:   'Profile' object has no attribute 'filter'

【问题讨论】:

【参考方案1】:

Profile 实例不是查询集。

你不应该覆盖get_queryset,你应该覆盖get_object,它会返回你想要显示的特定对象。

【讨论】:

澄清一下,也许:Profile.objects.first() 不返回查询集,它返回查询中的第一个对象(或无)。 docs.djangoproject.com/en/1.7/ref/models/querysets/#first 谢谢伙计。你真棒! :)

以上是关于DetailView中的自定义方法有啥问题的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate 自定义方言

init是一个自定义方法名

防止 ASP.NET Web API 路由引擎扣除自定义方法名

vue.js(19)--vue中子组件调用父组件的方法

ios10自定手势有啥用

R:ggplot上的自定义方程式。带有第三个变量的stat_function