diff --git a/CHANGELOG.md b/CHANGELOG.md index 2645021..78b667a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,10 @@ and this project attempts to adhere to [Semantic Versioning](https://semver.org/ ## [Unreleased] +### Fixed + +- Fixed a bug in `CRUDView.get_context_data` if the role had no specific context data method defined. + ## [0.12.0] ### Added diff --git a/src/django_twc_toolbox/crud/views.py b/src/django_twc_toolbox/crud/views.py index a83b8c6..bbc110b 100644 --- a/src/django_twc_toolbox/crud/views.py +++ b/src/django_twc_toolbox/crud/views.py @@ -163,12 +163,17 @@ def get_active_filters(filterset: object): @override def get_context_data(self, **kwargs: object) -> dict[str, object]: context = super().get_context_data(**kwargs) + context["list_view_url"] = Role.LIST.maybe_reverse(self) if self.object is not None: context["delete_view_url"] = Role.DELETE.maybe_reverse(self, self.object) context["detail_view_url"] = Role.DETAIL.maybe_reverse(self, self.object) context["update_view_url"] = Role.UPDATE.maybe_reverse(self, self.object) - context.update(self.get_role_context_data(context, **kwargs)) + + role_context = self.get_role_context_data(context, **kwargs) + if role_context: + context.update(role_context) + return context def get_role_context_data( diff --git a/tests/test_crud/test_views.py b/tests/test_crud/test_views.py index f8ed621..6785ce6 100644 --- a/tests/test_crud/test_views.py +++ b/tests/test_crud/test_views.py @@ -395,6 +395,25 @@ def test_get_role_context_data_nonexistent(role): assert result == {} +@pytest.mark.parametrize( + "role", + [ + Role.DETAIL, + Role.LIST, + Role.CREATE, + Role.UPDATE, + Role.DELETE, + ], +) +def test_get_context_data_role_method_nonexistent(role): + view = BookmarkView() + view.role = role + + view.get_context_data() + + assert True + + @pytest.mark.parametrize( "role", [