Djagno override_settings decorator not respected by DRF Serializer

In my Django settings I've defined a settings var like

EXTRA_METADATA_ENABLED = os.getenv("EXTRA_METADATA_ENABLED", False)

My test tries to override this by use of override_settings decorator

@override_settings(EXTRA_METADATA_ENABLED="Dog")
def test_serializer_metadata_deferred_behavior(self):
    serializer = ResourceBaseSerializer(self.layer)
    metadata_field = vars(serializer.__class__)['_declared_fields'].get('metadata')
    self.assertEqual(metadata_field.deferred, True)

When I check the var in ResourceBaseSerializer

if getattr(settings, "EXTRA_METADATA_ENABLED", False):
    print("I am here")
    print(settings.EXTRA_METADATA_ENABLED)
else:
    print("I am there")
    print(settings.EXTRA_METADATA_ENABLED) # False

It prints

I am there. 
False

Where I would expect Dog. Can someone shed light into what is going on? From my understanding the Serializer class should respect the settings var?

If your class ResourceBaseSerialzer has any critical method itself accessing settings then the override_settings decorator would have no effect at all. You may look at this blog post.

Back to Top