Для тех, кто задумывается над этим вопросом, вот что я делаю в 1.3. Это почти так же, как я делал это в 1.1 (за исключением более подробного). (т. е. как описано в ссылке на мой вопрос)
например соответствующие строки в urls.py могут выглядеть как
...
# pass a default value of page = 1 for optional parameter page
url(r'^obj/list$', ObjListView.as_view(), {'page': 1}, name='obj_list'),
url(r'^obj/list/page(?P<page>[0-9]+)$', ObjListView.as_view(), name='obj_list'),
...
# both new and edit use the same class, but edit obviously needs an id for the object.
# i should probably just be using pk but whatever.
url(r'^obj/new$', ObjEditView.as_view(), name='obj_edit'),
url(r'^obj/edit/(?P<obj_id>[0-9]+)/$', ObjEditView.as_view(), name='obj_edit'),
в случае класса ObjEditView, описанного выше, у нас может быть что-то вроде этого
class ObjEditView(UpdateView):
...
form_class = ObjForm
model=Obj
...
# this puts our obj in self.object
def get_object(self):
# if the obj exists, intialize our variables with values from the obj instance
# if it is a new obj, intialize accordingly
try:
obj = Obj.objects.get(id = self.kwargs['obj_id'])
except (KeyError, ObjectDoesNotExist):
obj = Obj()
return obj
Как следствие моего вопроса к Alasdair в комментариях выше, порядок выполнения для различных функций внутри классов обычно соответствует порядку, который они есть в документации. то есть в UpdateView get_object () предшествует get_initial ()