From db94da5f3f439f98a6f6dd3e81f659c9a3e36a60 Mon Sep 17 00:00:00 2001 From: Steven Klass Date: Sat, 27 Dec 2014 10:53:03 -0700 Subject: [PATCH] Do NOT CASCADE delete the history elements when a user gets deleted. Simply set the User field to None. --- AUTHORS.rst | 1 + CHANGES.rst | 4 ++++ simple_history/models.py | 3 ++- simple_history/tests/tests/test_admin.py | 16 ++++++++++++++++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/AUTHORS.rst b/AUTHORS.rst index bd6ce0486..dd057fc75 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -22,6 +22,7 @@ Authors - Micah Denbraver - Rajesh Pappula - Ross Lote +- Steven Klass - Trey Hunner - Ulysses Vilela - vnagendra diff --git a/CHANGES.rst b/CHANGES.rst index 123868e9a..5e91501a7 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,6 +1,10 @@ Changes ======= +1.5.x (YYYY-MM-DD) +------------------ +- Do NOT delete the history elements when a user is deleted. + 1.5.3 (2014-11-18) ------------------ - Fix migrations while using ``order_with_respsect_to`` (gh-140) diff --git a/simple_history/models.py b/simple_history/models.py index e1dd5f108..3ca217a2d 100644 --- a/simple_history/models.py +++ b/simple_history/models.py @@ -167,7 +167,8 @@ def get_instance(self): 'history_id': models.AutoField(primary_key=True), 'history_date': models.DateTimeField(), 'history_user': models.ForeignKey( - user_model, null=True, related_name=self.user_related_name), + user_model, null=True, related_name=self.user_related_name, + on_delete=models.SET_NULL), 'history_type': models.CharField(max_length=1, choices=( ('+', 'Created'), ('~', 'Changed'), diff --git a/simple_history/tests/tests/test_admin.py b/simple_history/tests/tests/test_admin.py index 1003a844f..a023597b8 100644 --- a/simple_history/tests/tests/test_admin.py +++ b/simple_history/tests/tests/test_admin.py @@ -219,3 +219,19 @@ def test_other_admin(self): self.app.get(history_url) change_url = get_history_url(state, 0, site="other_admin") self.app.get(change_url) + + def test_deleteting_user(self): + """Test deletes of a user does not cascade delete the history""" + self.login() + poll = Poll(question="why?", pub_date=today) + poll._history_user = self.user + poll.save() + + historical_poll = poll.history.all()[0] + self.assertEqual(historical_poll.history_user, self.user) + + self.user.delete() + + historical_poll = poll.history.all()[0] + self.assertEqual(historical_poll.history_user, None) +