【发布时间】:2012-03-13 06:42:48
【问题描述】:
我有一个基于函数的视图,如下所示:
def account_details(request, acc_id):
account = get_object_or_404(Account, pk=acc_id, person__user=request.user)
# ...
它会向您显示您的帐户成功的详细信息,如果您无权访问该帐户或该帐户不存在,则会显示 404。
我试图使用基于类的视图(扩展 DetailView)来实现相同的功能,并想出了这个:
class AccountDetailView(DetailView):
def get_object(self, queryset=None):
obj = super(AccountDetailView, self).get_object(queryset)
if obj.person.user != self.request.user:
raise Http404()
return obj
urlconf:
url(r'^account_details/(?P<pk>[0-9a-f]{24})$',
login_required(AccountDetailView.as_view(model=Account)),
name='account_details'),
这种态度有效,但引入了 2 个额外的查询,看起来不对。
是否有标准或更优雅的方式来实现相同的结果?
【问题讨论】:
-
我的第一个想法是覆盖
get_queryset(),但它不接受参数-无法检查帐户pk... -
顺便说一句,您可以通过
self.kwargs在基于分类的视图中访问关键字 args
标签: python django django-views django-class-based-views