ypr*_*rez 4 python django django-views django-class-based-views
我有一个基于函数的视图,看起来像这样:
def account_details(request, acc_id):
account = get_object_or_404(Account, pk=acc_id, person__user=request.user)
# ...
Run Code Online (Sandbox Code Playgroud)
其中显示了您的帐户成功的详细信息,如果您没有访问该帐户的权限或它不存在,则显示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
Run Code Online (Sandbox Code Playgroud)
urlconf:
url(r'^account_details/(?P<pk>[0-9a-f]{24})$',
login_required(AccountDetailView.as_view(model=Account)),
name='account_details'),
Run Code Online (Sandbox Code Playgroud)
这种态度有效,但引入了2个额外的查询,看起来不对.
是否有标准或更优雅的方式来实现相同的结果?
Chr*_*att 15
get_queryset无论如何你需要传递什么参数?这应该这样做:
def get_queryset(self):
qs = super(MyView, self).get_queryset()
return qs.filter(person__user=self.request.user)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7963 次 |
| 最近记录: |