无法将类型"SimpleLazyObject"与get_context_data(基于类的视图)适配



我在Heroku上部署了一个Django web应用程序。除了相关问题外,应用程序已部署并运行良好。

一些规格:

  1. 在本地环境中,我使用SQLite 3 DB
  2. 在Heroku环境中,我使用Postgress数据库

当我试图呈现基于类的视图时,我会遇到这个错误:

无法适应类型"SimpleLazyObject">

在对此问题进行了一些检查后,我怀疑它与User对象有关。但我不知道如何接近它。

查看代码:

class ProfileListView(LoginRequiredMixin, ListView):
model = Profile
template_name = 'profiles/profile_list.html'
context_object_name = 'qs'
def get_queryset(self):
qs = Profile.objects.get_all_profiles(self.request.user)
return qs
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
return context

网址:

urlpatterns = [
path('', ProfileListView.as_view(), name='all-profiles-view'),
]

定制经理:

class ProfileManager(models.Manager):
def get_all_profiles(self, me):
profiles = Profile.objects.all().exclude(user=me)
return profiles

编辑:

问题的根源似乎与有关

user = User.objects.get(username__iexact=self.request.user)

问题似乎来自get_queryset。因为django向请求添加了一个用户属性,该请求是SimpleLazyObject的实例。由于您的错误追溯显示SimpleLazyObject有问题,我怀疑问题来自request.user,它可能是User的对象,也可能是匿名用户。因此,在下面的答案中,我尝试添加if语句,以确保只有经过身份验证的用户才会有qs。

你可以根据自己的需要稍微调整一下。

尝试用替换

def get_queryset(self):
qs= []
if self.request.user.is_authenticated():
qs = Profile.objects.get_all_profiles(self.request.user)
return qs

相关内容

最新更新