Django:为什么选择KeyError:“ pk”

时间:2019-04-13 11:09:22

标签: python django python-3.x

我正在使用Django 2.1 我认为我已经正确描述了pk,但是发生了错误。您能告诉我为什么会发生错误以及解决方法吗?

KeyError at /create/
'pk'

根据该错误,“ get_success_url”似乎存在问题,但我不知道为什么。

#views.py
class MemoCreateView(LoginRequiredMixin, CreateView):
    model = Memo
    form_class = MemoForm

    def form_valid(self, form):
        obj = form.save(commit=False)
        obj.created_by = self.request.user
        return super(MemoCreateView, self).form_valid(form)

    def get_success_url(self):
        return reverse_lazy('detail', kwargs={"pk": self.kwargs['pk']})
#urls.py
urlpatterns = [
    path('<int:pk>', MemoDetailView.as_view(), name="detail"),
    path('create/', MemoCreateView.as_view(), name="create"),
]

1 个答案:

答案 0 :(得分:0)

因为创建视图的URL不包含pk。这是传递给DetailView的参数,但它必须来自保存的对象本身。

def get_success_url(self):
    return reverse('detail', kwargs={"pk": self.object.pk})