Почему object.pk будет None в get_success_url в CreateView?
У меня есть CreateView, на который после создания я хотел бы направить пользователя DetailView для этого вновь созданного экземпляра.
class ModelCreateView(LoginRequiredMixin, CreateView):
model = Model
template_name = 'models/model-create-template.html'
В моем методе get_success_url я использую self.object.pk, но это None.
def get_success_url(self):
return f'/model/{self.object.pk}'
class ModelCreateView(LoginRequiredMixin, CreateView):
model = Model
template_name = 'models/model-create-template.html'
def form_valid(self, form):
form.instance.user = self.request.user
return super().form_valid(form)
def get_success_url(self):
return f'/model/{self.object.pk}'
Модель для размножения:
class Model(models.Model):
id = models.IntegerField(primary_key=True)
Использование этой модели с кодом выше воспроизведет, что self.object.pk или self.object.id находится None внутри get_success_url.
Я вижу, что достиг успешного save(), поскольку мои сигналы post_save срабатывают, и form_valid() также вызывается, поскольку я обновляю пользователя в этом методе.
Когда я смотрю в отладчике на self.object, все остальные поля заполнены, на id и pk оба None. Глядя на экземпляр в админке, я могу подтвердить, что они действительно устанавливаются правильно, но по какой-то причине во время вызова get_success_url у меня нет доступа к этим данным.
Является ли экземпляр в self.object действительно созданным экземпляром, или он просто представляет поля, представленные формой CreateView? Если это первое, то как я могу получить доступ к экземпляру в get_success_url?