【发布时间】:2017-07-27 22:35:07
【问题描述】:
所以我想制作一个DetailView,它可以单独显示一张照片及其相关信息。但是,我想让它确保用户也有权访问照片。
这是视图的 urls.py
url(r'^photo/(?P<slug>[\-\d\w]+)/$', views.PhotoDetail.as_view(), name='photo'),
这是views.py
class PhotoDetail(DetailView):
template_name = 'otologue/photo_detail.html'
def get_object(self, queryset=None):
slug = self.get_slug_field()
print(slug)
object_instance = Photo.objects.filter(slug=slug)
print(object_instance)
object_user = object_instance.photoextended.user
user = get_object_or_404(User, username=self.request.user) # Get the user in the view
if object_user != user: # See if the object_user is the same as the user
return HttpResponseForbidden('Permission Error')
else:
return object_instance
如您所见,我尝试使用get_slug_field(),但是当我打印它时,它只会说“slug”,而 slug 应该说是 url 中的对象 slug。
由此 object_instance 没有任何对象,然后为什么我试图从中获取用户,它找不到任何数据。
【问题讨论】:
-
请注意,
filter()返回照片的查询集。如果你想要一张照片,你想要Photo.objects.get(slug=slug)(尽管这可能会引发get_object_or_404。
标签: python django django-views django-class-based-views