Как отправить куки в CreateView? - PullRequest
1 голос
/ 28 мая 2019

Я пытаюсь реализовать отправку подписанных файлов cookie в CreateView, но столкнулся с проблемой.Следующий код работает в UpdateView, но в CreateView у нас нет self.object в методе render_to_response, и в основном мы не можем получить pk там или, по крайней мере, я не знаю, как это сделать.

Вопрос в том, как получить pk или idнедавно созданного объекта или, возможно, в качестве альтернативы, в каком методе я мог бы переместить свой код, чтобы получить оттуда доступ к pk?

Спасибо.

def render_to_response(self, context, **response_kwargs):

    response = CreateView.render_to_response(self, context, **response_kwargs)
    existing_allowed_comments = self.request.get_signed_cookie('allowed_comments', default=None)
    if not self.request.user.is_authenticated:
        if existing_allowed_comments and str(self.object.pk) not in \
                existing_allowed_comments:
            response.set_signed_cookie('allowed_comments',
                 ", ".join([existing_allowed_comments, str(self.object.pk)])
        elif not existing_allowed_comments:
            response.set_signed_cookie('allowed_comments', self.object.pk
    return response

метод должен добавить pk созданных объектов к подписанномукуки-файлы, если пользователь не аутентифицирован.

self.get_object () также не работает - 404

1 Ответ

1 голос
/ 28 мая 2019

Возможно, для этого лучше переопределить метод form_valid(). Этот метод создает объект из проверенных данных формы, поэтому у вас будет доступ к self.object после вызова метода в базовом классе:

def form_valid(self, form):
    response = super().form_valid(form)
    existing_allowed_comments = self.request.get_signed_cookie('allowed_comments', default=None)
    if not self.request.user.is_authenticated:
        if existing_allowed_comments and str(self.object.pk) not in \
                existing_allowed_comments:
            response.set_signed_cookie('allowed_comments',
                 ", ".join([existing_allowed_comments, str(self.object.pk)])
        elif not existing_allowed_comments:
            response.set_signed_cookie('allowed_comments', self.object.pk
    return response

Обратите внимание: если форма неверна из-за неверных данных, объект не будет создан, и этот метод не будет вызван.

...