我有一個看起來像這樣的功能基礎觀點: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