render_to_response () - KeyError: 'объект' - PullRequest
       9

render_to_response () - KeyError: 'объект'

0 голосов
/ 16 декабря 2018

Я работаю над Джанго.Я получаю ошибку ниже.Я не нашел решения, несмотря на значительно возросший.Я был бы признателен, если бы вы могли помочь.

/ 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) 

Я не смог найти movie.id из render_to_response, возвращает контекстный диалог.

error page

Traceback screen- print

1 Ответ

0 голосов
/ 16 декабря 2018

A CreateView в основном используется дважды в процессе создания:

  1. один раз для создания формы для создания объекта, и в этом случае нет созданного объектаеще;и
  2. один раз для POST, который будет создавать объект.

В двух случаях вызывается render_to_response:

  1. , когда мы выполняемПОЛУЧИТЕ, и таким образом создайте форму, в которой нет никакого объекта (self.object = None, так что это означает, что не добавлен к данным контекста);и
  2. , когда мы выполняем POST, и форма оказывается недействительной , в этом случае форма обычно перерисовывается с ошибкой.

Youможно использовать self.object для доступа к объекту, который создает, но, как уже было сказано, это скорее бессмысленный здесь для доступа к нему, так как render_to_response, используется для визуализации формы, если она еще не заполнена или заполнена с ошибками.

Обычно указывается шаблон, который отображает форму, например:

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

    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 })

    # <i>no</i> render_to_response override
...