From 3cb41bbe3a2effe4dfd487e1ae6156de3b47285a Mon Sep 17 00:00:00 2001
From: Jeremy Stretch <jstretch@netboxlabs.com>
Date: Tue, 26 Sep 2023 12:06:47 -0400
Subject: [PATCH] Fixes #13849: Fix label resolution during serialization for
 removed field choices (#13867)

* Fixes #13849: Fix label resolution during serialization for removed field choices

* Cleanup
---
 netbox/netbox/api/fields.py | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/netbox/netbox/api/fields.py b/netbox/netbox/api/fields.py
index 347ed55bd..d6e43ea75 100644
--- a/netbox/netbox/api/fields.py
+++ b/netbox/netbox/api/fields.py
@@ -46,12 +46,13 @@ class ChoiceField(serializers.Field):
         return super().validate_empty_values(data)
 
     def to_representation(self, obj):
-        if obj == '':
-            return None
-        return {
-            'value': obj,
-            'label': self._choices[obj],
-        }
+        if obj != '':
+            # Use an empty string in place of the choice label if it cannot be resolved (i.e. because a previously
+            # configured choice has been removed from FIELD_CHOICES).
+            return {
+                'value': obj,
+                'label': self._choices.get(obj, ''),
+            }
 
     def to_internal_value(self, data):
         if data == '':