Django CBV 对象的 AttributeError: 没有 'object' 属性

0 投票
1 回答
513 浏览
提问于 2025-04-18 09:25

我不太明白为什么会出现下面这个错误。我按照我认为正确的写法去做了。

错误信息:

属性错误(AttributeError) 属性错误:'CampaignView'对象没有'object'这个属性

完整的错误追踪信息:

Traceback (most recent call last):
  File "/Users/user/Documents/workspace/test/django-env/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", line 67, in __call__
    return self.application(environ, start_response)
  File "/Users/user/Documents/workspace/testsite/django-env/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 206, in __call__
    response = self.get_response(request)
  File "/Users/user/Documents/workspace/testsite/django-env/lib/python2.7/site-packages/django/core/handlers/base.py", line 194, in get_response
    response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
  File "/Users/user/Documents/workspace/testsite/django-env/lib/python2.7/site-packages/django/core/handlers/base.py", line 229, in handle_uncaught_exception
    return debug.technical_500_response(request, *exc_info)
  File "/Users/user/Documents/workspace/testsite/django-env/lib/python2.7/site-packages/django_extensions/management/technical_response.py", line 5, in null_technical_500_response
    six.reraise(exc_type, exc_value, tb)
  File "/Users/user/Documents/workspace/testsite/django-env/lib/python2.7/site-packages/django/core/handlers/base.py", line 112, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/user/Documents/workspace/testsite/django-env/lib/python2.7/site-packages/django/views/generic/base.py", line 69, in view
    return self.dispatch(request, *args, **kwargs)
  File "/Users/user/Documents/workspace/testsite/django-env/lib/python2.7/site-packages/django/views/generic/base.py", line 87, in dispatch
    return handler(request, *args, **kwargs)
  File "/Users/user/Documents/workspace/testsite/testsite/apps/campaigns/views/campaign.py", line 54, in post
    return super(CampaignView, self).form_invalid(form)
  File "/Users/user/Documents/workspace/testsite/django-env/lib/python2.7/site-packages/django/views/generic/edit.py", line 85, in form_invalid
    return self.render_to_response(self.get_context_data(form=form))
  File "/Users/user/Documents/workspace/testsite/django-env/lib/python2.7/site-packages/django/views/generic/detail.py", line 96, in get_context_data
    if self.object:
AttributeError: 'CampaignView' object has no attribute 'object'

视图(View)

class CampaignView(UpdateView):
    form_class = UserLookUpFrom
    model = Campaign
    success_url = reverse_lazy('campaigns_detail')




    def form_valid(self, form):
        """
        If the form is valid, in this case DON'T save it!
        """
        return super(CampaignView, self).form_valid(form)

    def _user_exists(self, email_mobile):
        """
        Checks if user exists from email.
        :return: true or false : boolean
        """


        return AppUser.objects.does_user_exists(email_mobile)

    def _get_user_id(self, email_mobile):
        """
        Returns user ID based on email.
        """
        return AppUser.objects.get_user_id(email_mobile)


    def post(self, request, *args, **kwargs):
        """
        Handles POST requests, instantiating a form instance with the passed
        POST variables and then checked for validity.
        """
        form = self.form_class(request.POST)
        if form.is_valid():
            email_mobile = form.cleaned_data['email_mobile']
            if self._user_exists(email_mobile):
                user_id = self._get_user_id(email_mobile)
                return redirect(reverse('campaigns_share', args=(self.object.id, user_id)))
            return super(CampaignView, self).form_valid(form)
        return super(CampaignView, self).form_invalid(form)

1 个回答

2

你已经重写了 post 方法,所以通常在处理 POST 请求时会进行的一些标准设置就不会被调用了。

你那段代码中 - 在 is_valid() 这个块里的所有内容 - 其实放到 form_valid 方法里会更好。其他的部分都是标准行为可以处理的,所以你可以完全去掉那个 post 方法。

撰写回答