render_to_response()-KeyError:“对象”

时间:2018-12-16 08:42:46

标签: django django-views

我正在使用Django。我收到下面的错误。尽管增加了很多,但我没有找到解决方案。如果您能提供帮助,我将不胜感激。

/core/views.py

class CreateVote(LoginRequiredMixin, CreateView):
form_class = VoteForm

def get_initial(self):
    initial = super().get_initial()
    initial['user'] = self.request.user.id
    initial['movie'] = self.kwargs[
        'movie_id'
    ]
    return initial

def get_success_url(self):
    moive_id = self.object.moive.id
    return reverse(
        'core:MovieDetail',
        kwargs = {
            'pk':moive_id
        }
         )    
def render_to_response(self, context, **response_kwargs):
    movie_id = context['object']
    movie_detail_url = reverse(
        'core:MovieDetail',
        kwargs = {'pk':movie_id }
    )

    return redirect(
        to=movie_detail_url) 

我无法从render_to_response中找到movie.id返回上下文dic。

error page

Traceback screen- print

1 个答案:

答案 0 :(得分:1)

CreateView在创建过程中基本上使用了两次:

  1. 一旦构造了表单以创建对象,在这种情况下,还没有 创建对象;和
  2. 一次用于构建对象的POST。

在两种情况下称为render_to_response

  1. 当我们执行GET并因此创建表单时,此时没有对象({self.object = None,因此这意味着不会添加到上下文数据中) ;和
  2. 当我们执行POST时,该表格被证明为无效,在这种情况下,该表格通常会因错误而重新呈现。

您可以使用self.object来访问所创建的对象,但是如前所述,由于render_to_response是用于呈现尚未填充或存在错误的表单。

通常指定一个提供表单的模板,例如:

class CreateVote(LoginRequiredMixin, CreateView):
    form_class = VoteForm
    template_name = 'app/some_template.html'

    def get_initial(self):
        initial = super().get_initial()
        initial['user'] = self.request.user.id
        initial['movie'] = self.kwargs['movie_id']
        return initial

    def get_success_url(self):
        movie_id = self.object.moive.id
        return reverse('core:MovieDetail', kwargs = {'pk': movie_id })

    # no render_to_response override