2017-11-21 2 views
0

Ich benutze Django 1.11.3 und ich versuche Benutzer umzuleiten, nachdem die "Speichern" Taste auf einem Modell in Admin gedrückt wurde. Also, meine admin.py Datei muß ich folgenden Code (ein Teil davon):'NoneType' Objekt hat kein Attribut '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) 

aber ich bekomme die folgende Fehlermeldung, nachdem ich die Taste drücken:

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

Ich habe auch versucht mit redirect und HttpResponse , aber der Fehler bleibt bestehen.

Voll Zurückverfolgungs:

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' 

Was mache ich falsch?

Antwort

0

Ihre Methodensignatur von response_change ist falsch. Versuchen Sie, die Methode zu ändern:

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

Vielen Dank! Jedes Mal, wenn ich zu "/ admin/pict/article /" umgeleitet werde, auch wenn "obj.type" ** 1 ** ist (basierend auf Druck). Irgendeine Idee? – user8980530

+0

Überprüfen Sie, was 'repr (obj.type)' und 'type (obj.type)' sind. Vielleicht ist "obj.type" die Zeichenkette "1", nicht die Ganzzahl "1". – Alasdair

+0

Ja, Typ war das Problem. Danke vielmals! – user8980530

Verwandte Themen