Why does UpdateView need to have model/queryset/get_queryset defined when using form_class as opposed to CreateView?

僤鯓⒐⒋嵵緔 提交于 2019-12-05 07:40:40

Currently (django 1.5.1 official release) UpdateView is calling self.get_object() to be able to provide instance object to Form.

From https://github.com/django/django/blob/1.5c2/django/views/generic/edit.py#L217:

def get(self, request, *args, **kwargs):
    self.object = self.get_object()
    return super(BaseUpdateView, self).get(request, *args, **kwargs)

def post(self, request, *args, **kwargs):
    self.object = self.get_object()
    return super(BaseUpdateView, self).post(request, *args, **kwargs)

And self.get_object method needs one of this properties declared: model, queryset or get_queryset

Whereas CreateView don't call self.get_object().

From https://github.com/django/django/blob/1.5c2/django/views/generic/edit.py#L194:

def get(self, request, *args, **kwargs):
    self.object = None
    return super(BaseCreateView, self).get(request, *args, **kwargs)

def post(self, request, *args, **kwargs):
    self.object = None
    return super(BaseCreateView, self).post(request, *args, **kwargs)

You might have a problem in your urls.py file.

What I think you wrote in it is:

url(r'foldername/(?P[0-9]+)/$', views.UpdateView.as_view(), name='update'),

but you have to change UpdateView to MyUpdateView, like this: url(r'foldername/(?P[0-9]+)/$', views.MyUpdateView.as_view(), name='update'),

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!