'str'对象不可调用 - SuccessMessageMixin

时间:2016-10-21 10:02:56

标签: django django-class-based-views

我在SuccessMessageMixin的项目中遇到此错误,并且不知道原因。这是我在view.py中的代码。

from django.contrib.messages.views import SuccessMessageMixin
from django.views.generic import CreateView

class CampanaNueva(SuccessMessageMixin, CreateView):
    model = Campana
    template_name = "licencias_campana_nueva.html"
    fields = ['temporada', 'descripcion']
    success_message = "a"

并在保存时提出此错误:

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/licencias/editar/1

Django Version: 1.9.4
Python Version: 3.4.4
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'bootstrap3',
 'home',
 'widget_tweaks',
 'socios',
 'equipaciones',
 'licencias']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'cc_corbelo.middleware.LoginRequiredMiddleware']



Traceback:

File "C:\Python34\lib\site-packages\django\core\handlers\base.py" in get_response
  149.                     response = self.process_exception_by_middleware(e, request)

File "C:\Python34\lib\site-packages\django\core\handlers\base.py" in get_response
  147.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Python34\lib\site-packages\django\views\generic\base.py" in view
  68.             return self.dispatch(request, *args, **kwargs)

File "C:\Python34\lib\site-packages\django\views\generic\base.py" in dispatch
  88.         return handler(request, *args, **kwargs)

File "C:\Python34\lib\site-packages\django\views\generic\edit.py" in post
  279.         return super(BaseUpdateView, self).post(request, *args, **kwargs)

File "C:\Python34\lib\site-packages\django\views\generic\edit.py" in post
  222.             return self.form_valid(form)

File "C:\Python34\lib\site-packages\django\contrib\messages\views.py" in form_valid
  14.             messages.success(self.request, success_message)

Exception Type: TypeError at /licencias/editar/1
Exception Value: 'str' object is not callable

我有这个功能在另一个项目中工作没有问题......

1 个答案:

答案 0 :(得分:1)

当我在项目中完全不同的视图的messages方法中不正确地使用form_valid框架时,我得到了完全相同的消息。

正确的代码应该是:

messages.success(request, "Deactivated product")

但我写的却是

messages.success = "Deactivated product"

此代码不起作用,但它也不会导致页面出错!但是,只要我提交了使用SuccessMessageMixin不同的表单,我就会看到'str' object is not callable错误。

(在一个页面上出现问题导致在完全不同的页面上出错是很有趣的。)