【问题标题】:Django AttributeError: 'str' object has no attribute 'get'Django AttributeError:'str'对象没有属性'get'
【发布时间】:2020-04-01 13:45:50
【问题描述】:

访问网址时,它会返回问题标题中提到的错误。

View 本身是一个 ListView。

当我调试视图时,它只循环通过调度程序函数并返回以下错误而没有进入查询集。 这是代码。

列表视图

class MailingListView(ListView, LoginRequiredMixin):
    # model = MailingList
    template_name = 'mailinglist/mailing_list.html'

    def get_queryset(self):
        return MailingList.objects.filter(owner=self.request.user)

    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated:
            return reverse('user:login')
        return super().dispatch(request, *args, **kwargs)

型号

class MailingList(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4(), editable=False)
    name = models.CharField(max_length=140)
    owner = models.ForeignKey(to=user_model,
                              on_delete=models.CASCADE)

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('mailinglist:manage_list', kwargs={'pk': self.id})

    def user_can_use_mailinglist(self, user):
        return user == self.owner

追溯

> Internal Server Error: /mailinglist/ Traceback (most recent call
> last):   File
> "/venv/lib/python3.7/site-packages/django/core/handlers/exception.py",
> line 34, in inner
>     response = get_response(request)   File "/venv/lib/python3.7/site-packages/django/utils/deprecation.py",
> line 93, in __call__
>     response = self.process_response(request, response)   File /venv/lib/python3.7/site-packages/django/middleware/clickjacking.py",
> line 26, in process_response
>     if response.get('X-Frame-Options') is not None: AttributeError: 'str' object has no attribute 'get'

【问题讨论】:

  • 添加你的错误回溯

标签: django django-views


【解决方案1】:

reverse() 返回一个字符串。但是你应该返回 HTTP 响应。

dispatch 更改为 MailingListView。

from django.http import HttpResponseRedirect

return HttpResponseRedirect(reverse('user:login'))

【讨论】:

  • 感谢您的帮助。如果有足够的代表会投票。
  • 你可以接受。这将有助于其他开发人员了解此解决方案的工作原理
  • 这个答案应该被接受,伙计......我在我的大脑中吹嘘我在基于班级的观点中做错了什么然后我发现了这个。谢谢兄弟!
猜你喜欢
  • 2021-05-22
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 2022-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多