我正在尝试在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
答案 0 :(得分:1)
为此,您最好重写include
方法。此方法从经过验证的表单数据创建一个对象,因此您可以在基类中调用该方法后访问form_valid()
:
self.object
请注意,如果表单由于数据错误而无效,则不会创建任何对象,并且不会调用此方法。