2017-11-21 3 views
0

私はDjango 1.11.3を使用しています。管理者の一部のモデルで[保存]ボタンを押した後にユーザーをリダイレクトしようとしています。だから、次のコード(その一部)に私が持っている私のadmin.pyファイルに:私はボタンを押した後'NoneType'オブジェクトに属性がありません 'has_header'

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' 

答えて

0

お客様のメソッドの署名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/') 
+0

ありがとうございます!毎回、 'obj.type'が** 1 **(印刷に基づく)であっても'/admin/pict/article/'にリダイレクトされます。何か案が? – user8980530

+0

'repr(obj.type)'と 'type(obj.type)'が何であるかを確認してください。おそらく 'obj.type'は文字列' '1'であり、整数 '1'ではありません。 – Alasdair

+0

はい、タイプが問題でした。どうもありがとう! – user8980530

関連する問題