diff options
author | Matthew Lemon <lemon@matthewlemon.com> | 2020-02-20 16:34:57 +0000 |
---|---|---|
committer | Matthew Lemon <lemon@matthewlemon.com> | 2020-02-20 16:34:57 +0000 |
commit | 8d2487262dfcffc2d6d20666dd99308b02165e11 (patch) | |
tree | 7e6e00d55ad96a1e0595d9ec0b90a02682876b44 /ctrack/organisations/models.py | |
parent | 0d9162aee0b28f5117a453064bd86577df35658a (diff) |
changed database rules so that deleting Users does not delete Organisation and Person objects
Diffstat (limited to 'ctrack/organisations/models.py')
-rw-r--r-- | ctrack/organisations/models.py | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/ctrack/organisations/models.py b/ctrack/organisations/models.py index a04fa32..13023a0 100644 --- a/ctrack/organisations/models.py +++ b/ctrack/organisations/models.py @@ -43,6 +43,15 @@ class Person(models.Model): (5, "DV"), (6, "Other"), ] + + def get_sentinel_user(): + """ + We need this so that we can ensure models.SET() is applied with a callable + to handle when Users are deleted from the system, preventing the Person objects + related to them being deleted also. + """ + return get_user_model().objects.get_or_create(username='DELETED USER')[0] + primary_nis_contact = models.BooleanField( default=False, verbose_name="Primary NIS contact" ) @@ -59,7 +68,7 @@ class Person(models.Model): mobile = models.CharField(max_length=20, blank=True) landline = models.CharField(max_length=20, blank=True) date_updated = models.DateField(auto_now=True) - updated_by = models.ForeignKey(get_user_model(), on_delete=models.CASCADE) + updated_by = models.ForeignKey(get_user_model(), on_delete=models.SET(get_sentinel_user)) clearance = models.IntegerField(choices=CLEARANCE_LEVEL, default=1) clearance_sponsor = models.CharField(max_length=100, blank=True) clearance_start_date = models.DateField(blank=True, null=True) @@ -98,12 +107,19 @@ class Submode(models.Model): class Organisation(models.Model): - DESIGNATION_TYPE = [ (1, "Automatic"), (2, "Reserve Power"), ] + def get_sentinel_user(): + """ + We need this so that we can ensure models.SET() is applied with a callable + to handle when Users are deleted from the system, preventing the Organisations + related to them being deleted also. + """ + return get_user_model().objects.get_or_create(username='DELETED USER')[0] + name = models.CharField(max_length=255) slug = AutoSlugField(populate_from=["name"]) submode = models.ForeignKey( @@ -113,7 +129,7 @@ class Organisation(models.Model): registered_company_name = models.CharField(max_length=255, blank=True) registered_company_number = models.CharField(max_length=100, blank=True) date_updated = models.DateField(auto_now=True) - updated_by = models.ForeignKey(get_user_model(), on_delete=models.CASCADE) + updated_by = models.ForeignKey(get_user_model(), on_delete=models.SET(get_sentinel_user)) comments = models.TextField(max_length=500) active = models.BooleanField(default=True) |