如何在CreateView中发送Cookie?

时间:2019-05-28 17:31:22

标签: django django-views

我正在尝试在CreateView中实现签名的cookie发送,但是遇到了麻烦。以下代码在UpdateView中有效,但在CreateView中,render_to_response方法中没有self.object,基本上我们无法在其中获得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添加到已签名的cookie中。

self.get_object()不能正常工作– 404

1 个答案:

答案 0 :(得分:1)

为此,您最好重写include方法。此方法从经过验证的表单数据创建一个对象,因此您可以在基类中调用该方法后访问form_valid()

self.object

请注意,如果表单由于数据错误而无效,则不会创建任何对象,并且不会调用此方法。