diff --git a/djadmin2/templates/admin2/bootstrap/model_add_form.html b/djadmin2/templates/admin2/bootstrap/model_add_form.html index f18b91a..6061116 100644 --- a/djadmin2/templates/admin2/bootstrap/model_add_form.html +++ b/djadmin2/templates/admin2/bootstrap/model_add_form.html @@ -9,7 +9,9 @@
{% csrf_token %} {{ form.as_p }} - + + +
{% endblock content %} diff --git a/djadmin2/views.py b/djadmin2/views.py index 179959c..60c6c34 100644 --- a/djadmin2/views.py +++ b/djadmin2/views.py @@ -9,6 +9,9 @@ from django.views import generic from braces.views import AccessMixin +from templatetags.admin2_urls import admin2_urlname + + ADMIN2_THEME_DIRECTORY = getattr(settings, "ADMIN2_THEME_DIRECTORY", "admin2/bootstrap") @@ -98,10 +101,6 @@ class ModelListView(Admin2Mixin, generic.ListView): context['model_pluralized'] = self.get_model()._meta.verbose_name_plural return context - def get_success_url(self): - view_name = 'admin2:{}_{}_detail'.format(self.app_label, self.model_name) - return reverse(view_name, kwargs={'pk': self.object.pk}) - class ModelDetailView(AdminModel2Mixin, generic.DetailView): default_template_name = "model_detail.html" @@ -117,7 +116,6 @@ class ModelEditFormView(AdminModel2Mixin, generic.UpdateView): class ModelAddFormView(AdminModel2Mixin, generic.CreateView): form_class = None - success_url = "../" default_template_name = "model_add_form.html" permission_type = 'add' @@ -127,8 +125,15 @@ class ModelAddFormView(AdminModel2Mixin, generic.CreateView): return context def get_success_url(self): - view_name = 'admin2:{}_{}_detail'.format(self.app_label, self.model_name) - return reverse(view_name, kwargs={'pk': self.object.pk}) + if '_continue' in self.request.POST: + view_name = admin2_urlname(self, 'update') + return reverse(view_name, kwargs={'pk': self.object.pk}) + + if '_addanother' in self.request.POST: + return reverse(admin2_urlname(self, 'create')) + + # default to index view + return reverse(admin2_urlname(self, 'index')) class ModelDeleteView(AdminModel2Mixin, generic.DeleteView): diff --git a/example/blog/tests/test_views.py b/example/blog/tests/test_views.py index 7c8e20e..0ff839d 100644 --- a/example/blog/tests/test_views.py +++ b/example/blog/tests/test_views.py @@ -51,7 +51,34 @@ class PostCreateViewTest(BaseIntegrationTest): follow=True) self.assertTrue(Post.objects.filter(title="a_post_title").exists()) post = Post.objects.get(title="a_post_title") - self.assertRedirects(response, reverse("admin2:blog_post_detail", + self.assertRedirects(response, reverse("admin2:blog_post_index")) + + def test_save_and_add_another_redirects_to_create(self): + """ + Tests that choosing 'Save and add another' from the model create + page redirects the user to the model create page. + """ + post_data = {"title": "a_post_title", + "body": "a_post_body", + "_addanother": ""} + self.client.login(username='admin', password='password') + response = self.client.post(reverse("admin2:blog_post_create"), + post_data) + post = Post.objects.get(title='a_post_title') + self.assertRedirects(response, reverse("admin2:blog_post_create")) + + def test_save_and_continue_editing_redirects_to_update(self): + """ + Tests that choosing "Save and continue editing" redirects + the user to the model update form. + """ + post_data = {"title": "Unique", + "body": "a_post_body", + "_continue": ""} + response = self.client.post(reverse("admin2:blog_post_create"), + post_data) + post = Post.objects.get(title="Unique") + self.assertRedirects(response, reverse("admin2:blog_post_update", args=(post.pk, )))