我有一个看起来像这样的功能基础观点:Django的 - 过滤于的DetailView
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
URL配置:
url(r'^account_details/(?P<pk>[0-9a-f]{24})$',
login_required(AccountDetailView.as_view(model=Account)),
name='account_details'),
这种态度工作,但介绍2个额外的查询,看起来不对。
是否有标准或更优雅的方式来实现相同的结果?
我的第一个想法是重写'get_queryset()',但它不接受参数 - 无法检查帐户pk ... – yprez 2012-02-22 21:23:35
btw,你有权访问关键字args在通过'self.kwargs'分类的视图中 – 2012-02-23 00:42:21