В просмотров У меня есть следующие классы:
class AddPersonView(CustomCreateView):
template_name = "register/add.html"
form_class = PersonForm
model = Person
obj = Person.objects.all().count()
if obj > 0:
obj = Person.objects.last()
success_url = reverse_lazy('register:edit_person_view', kwargs={'pk': obj.id})
def get_context_data(self, **kwargs):
context = super(AddPersonView,
self).get_context_data(**kwargs)
class EditPersonView(CustomUpdateView):
template_name = "register/edit.html"
form_class = PersonForm
model = Person
obj = Person.objects.all().count()
if obj > 0:
obj = Person.objects.last()
success_url = reverse_lazy('register:edit_person_view', kwargs={'pk': obj.id})
def get_context_data(self, **kwargs):
context = super(EditPersonView,
self).get_context_data(**kwargs)
return context
Мое намерение состоит в том, чтобы, когда вы отправляете submit
на странице регистрации человека, новая страница является страницей редактирования этого человека. Но то, как я его использую, после добавления или редактирования человека открывается следующая страница с id
предыдущей записи.
Например, если я сейчас зарегистрирую person
с идентификатором 12
и дам submit
страницу, которую я должен открыть, это будет mysite.com/register/edit/12
, но она открывается mysite.com/register/edit/11
.
Я попытался сделать следующее: вместо использования переменной sucess_url
я использовал эту функцию в обоих классах:
def get_success_url(self):
return reverse('register:edit_person_view', kwargs={'pk': self.kwargs('pk')})
Однако, давая submit
странице, я получаю эту ошибку:
TypeError at /register/edit/12/
argument of type 'NoneType' is not iterable
During handling of the above exception (Reverse for 'None' not found. 'None' is not a valid view function or pattern name.)
Как правильно на следующей странице быть страницей редактирования объекта, который я добавляю / редактирую?
EDIT
Выполнение некоторых предполагаемых тестов на то, что функция get_success_url
не работает, потому что, когда она использует ту же форму с переменной success_url
, при редактировании лица и отправке, я перенаправляюсь на новую страницу для новой регистрации .
class EditPersonView(CustomUpdateView):
template_name = "register/edit.html"
form_class = PersonForm
model = Person
success_url = reverse_lazy('register:add_person_view')
def get_context_data(self, **kwargs):
context = super(EditPersonView,
self).get_context_data(**kwargs)
return context
Но при использовании функции:
def get_success_url(self):
return reverse('register:add_person_view')
Я получаю ту же ошибку
TypeError at /register/edit/12/
argument of type 'NoneType' is not iterable
During handling of the above exception (Reverse for 'None' not found. 'None' is not a valid view function or pattern name.)
Что плохого в том, что функция get_success_url
не работает?