From a237b2a10b8250c16a9218e2130461b4f9b4b721 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Wed, 12 Oct 2022 09:07:37 -0400 Subject: [PATCH] Clear any pre-existing cached entries on cache() --- netbox/netbox/search/backends.py | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/netbox/netbox/search/backends.py b/netbox/netbox/search/backends.py index 4ae249293..ee837adbd 100644 --- a/netbox/netbox/search/backends.py +++ b/netbox/netbox/search/backends.py @@ -180,20 +180,27 @@ class CachedValueSearchBackend(SearchBackend): @classmethod def cache(cls, instance, data): + ct = ContentType.objects.get_for_model(instance) + + # Wipe out any previously cached values for the object + CachedValue.objects.filter(object_type=ct, object_id=instance.pk).delete() + + # Record any new non-empty values + cached_values = [] for field in data: if not field.value: continue - ct = ContentType.objects.get_for_model(instance) - CachedValue.objects.update_or_create( - defaults={ - 'value': field.value, - 'weight': field.weight, - }, - object_type=ct, - object_id=instance.pk, - field=field.name, - type=field.type + cached_values.append( + CachedValue( + object_type=ct, + object_id=instance.pk, + field=field.name, + type=field.type, + weight=field.weight, + value=field.value + ) ) + CachedValue.objects.bulk_create(cached_values) @classmethod def remove(cls, instance):