我有一个DetailView
课程,其中我没有通过pk或slug。因此,我试图覆盖get_object(self)
并手动放置查询过滤器项(在我的情况下是当前登录的用户)。但是,我没有成功:
class ViewSpecialUser(LoginRequiredMixin, DetailView):
model = SpecialUser
print(self)
def get_object(self):
object = super(ViewSpecialUser, self).get_object(queryset)
object.queryset = queryset.filter(pk=self.request.user.pk)
return object
def get_context_data(self, **kwargs):
context = super(ViewSpecialUser, self).get_context_data(**kwargs)
return context
答案 0 :(得分:6)
只需返回Model的实例:
def get_object(self):
return self.model.objects.get(pk=self.request.user.pk)
答案 1 :(得分:3)
get_object
参数调用 queryset
,您忽略该参数,并且您可能会收到TypeError: get_object() takes exactly 1 argument (2 given)
个异常。如果在您的特定情况下没有get_object
参数调用queryset
时,甚至,那么您实际上正在尝试引用相同的{{} 1}}你从未在第一时间定义的变量,所以你可能会得到queryset
例外。
如果没有提供NameError: global name 'queryset' not defined
sets up a default for the queryset
parameter SingleObjectMixin
的{{1}},那么你应该这样做:
get_object
然后,您应该使用def get_object(self, queryset=None):
...
if queryset is None:
queryset = self.get_queryset()
...
(作为参数或来自queryset
)来查找您的用户:
self.get_queryset()
当然,这假设1) return queryset.get(pk=self.request.user.pk)
是您首先在身份验证中使用的用户模型,或者2)SpecialUser
与您的实际用户模型同步是