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中的自定义方法有啥问题的主要内容,如果未能解决你的问题,请参考以下文章