【问题标题】:can't adapt type 'SimpleLazyObject' with get_context_data (Class Based View)无法使用 get_context_data 调整类型“SimpleLazyObject”(基于类的视图)
【发布时间】:2021-03-27 05:22:05
【问题描述】:

我有一个部署到 Heroku 的 Django Web 应用程序。 应用已部署且运行良好,但相关问题除外。

一些规格:

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

当我尝试渲染基于类的视图时,我会遇到此错误:

无法适应类型“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)

【问题讨论】:

    标签: python django heroku


    【解决方案1】:

    问题似乎来自get_queryset。因为 django 在 request 中添加了一个 user 属性,它是 SimpleLazyObject 的一个实例。由于您的错误回溯显示SimpleLazyObject 有问题,我怀疑问题来自request.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
    

    【讨论】:

    • 我已经复制粘贴了你的代码,但我仍然得到错误 can't adapt type 'SimpleLazyObject'
    • 你的 get_all_profiles 是什么?你能展示那部分吗?
    • get_all_profiles 是否涉及filter
    • 我已经根据您的需求编辑了我的帖子,看看。这是一个定制的经理。
    • 更新:似乎是user = User.objects.get(username__iexact=self.request.user) 引起了问题,我已将其删除并更改了profile = Profile.objects.get(user=self.request.user)。它可以
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多