From d049c1c244f07fcae61be7b23dc6a0daafdacc8e Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Tue, 27 Sep 2016 10:51:33 -0400 Subject: [PATCH] Fixes #576: Delete all relevant CustomFieldValues ehen deleting a CustomFieldChoice --- netbox/extras/models.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/netbox/extras/models.py b/netbox/extras/models.py index 64e84ef66..a93b1ab90 100644 --- a/netbox/extras/models.py +++ b/netbox/extras/models.py @@ -146,8 +146,10 @@ class CustomField(models.Model): # Read date as YYYY-MM-DD return date(*[int(n) for n in serialized_value.split('-')]) if self.type == CF_TYPE_SELECT: - # return CustomFieldChoice.objects.get(pk=int(serialized_value)) - return self.choices.get(pk=int(serialized_value)) + try: + return self.choices.get(pk=int(serialized_value)) + except CustomFieldChoice.DoesNotExist: + return None return serialized_value @@ -198,6 +200,12 @@ class CustomFieldChoice(models.Model): if self.field.type != CF_TYPE_SELECT: raise ValidationError("Custom field choices can only be assigned to selection fields.") + def delete(self, using=None, keep_parents=False): + # When deleting a CustomFieldChoice, delete all CustomFieldValues which point to it + pk = self.pk + super(CustomFieldChoice, self).delete(using, keep_parents) + CustomFieldValue.objects.filter(field__type=CF_TYPE_SELECT, serialized_value=str(pk)).delete() + class Graph(models.Model): type = models.PositiveSmallIntegerField(choices=GRAPH_TYPE_CHOICES)