Currently (official release of django 1.5.1), UpdateView calls self.get_object() to provide an instance object for the 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 for the self.get_object method one of the following properties is required: model , queryset or get_queryset
While CreateView does not 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)