【问题标题】:'NoneType' object has no attribute 'has_header'“NoneType”对象没有属性“has_header”
【发布时间】:2018-05-05 03:21:41
【问题描述】:

我使用 Django 1.11.3 并尝试在管理员中的某些模型上按下“保存”按钮后重定向用户。所以,在我的admin.py 文件中,我必须遵循代码(其中的一部分):

from django.contrib import admin
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.http import HttpResponseRedirect
from .models import Info

class InfoAdmin(admin.ModelAdmin):
    def response_change(self, request, object, form_url=''):
        if(object.type == 1):
            return HttpResponseRedirect('/admin/pict/data/add/?info=' + str(object.info))
        else:
            return HttpResponseRedirect('/admin/pict/article/')
admin.site.register(Info, InfoAdmin)

但我按下按钮后出现以下错误:

AttributeError at /admin/pict/info/58/change/
'NoneType' object has no attribute 'has_header'

我也尝试了redirectHttpResponse,但错误仍然存​​在。

完整的回溯

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/admin/pict/info/58/change/

Django Version: 1.11.3
Python Version: 3.5.2
Installed Applications:
['pict.apps.PictConfig',
 'suit',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'massadmin']
Installed Middleware:
['whitenoise.middleware.WhiteNoiseMiddleware',
 'django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']


Traceback:

File "/Users/mick/.virtualenvs/gbs/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner
  41.             response = get_response(request)
File "/Users/mick/.virtualenvs/gbs/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)
File "/Users/mick/.virtualenvs/gbs/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/mick/.virtualenvs/gbs/lib/python3.5/site-packages/django/contrib/admin/options.py" in wrapper
  551.                 return self.admin_site.admin_view(view)(*args, **kwargs)
File "/Users/mick/.virtualenvs/gbs/lib/python3.5/site-packages/django/utils/decorators.py" in _wrapped_view
  149.                     response = view_func(request, *args, **kwargs)
File "/Users/mick/.virtualenvs/gbs/lib/python3.5/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
  58.         add_never_cache_headers(response)
File "/Users/mick/.virtualenvs/gbs/lib/python3.5/site-packages/django/utils/cache.py" in add_never_cache_headers
  274.     patch_response_headers(response, cache_timeout=-1)
File "/Users/mick/.virtualenvs/gbs/lib/python3.5/site-packages/django/utils/cache.py" in patch_response_headers
  265.     if not response.has_header('Expires'):

Exception Type: AttributeError at /admin/pict/info/58/change/
Exception Value: 'NoneType' object has no attribute 'has_header'

我做错了什么?

【问题讨论】:

    标签: python django redirect django-admin


    【解决方案1】:

    response_change 的方法签名不正确。尝试将方法更改为:

    def response_change(self, request, obj):
        if(obj.type == 1):
            return HttpResponseRedirect('/admin/pict/data/add/?info=' + str(obj.info))
        else:
            return HttpResponseRedirect('/admin/pict/article/')
    

    【讨论】:

    • 谢谢!每次我被重定向到/admin/pict/article/,即使obj.type1(基于打印)。有什么想法吗?
    • 检查 repr(obj.type)type(obj.type) 是什么。也许obj.type 是字符串'1',而不是整数1
    猜你喜欢
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 2014-07-05
    • 2013-02-11
    • 2018-12-01
    • 2017-08-02
    相关资源
    最近更新 更多