次のような関数ベースのビューがありました。
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 つの余分なクエリが発生し、見た目が正しくありません。
同じ結果を達成するための標準的またはよりエレガントな方法はありますか?