﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
34829	Django reports the “mutually exclusive” error for settings that do not contain STATICFILES_STORAGE.	Malik A. Rumi	nobody	"There is no STATICFILES_STORAGE constant in my settings module. I took a look at the bytecode in pycache. There was no reference to STATICFILES_STORAGE there, either, but I did see a reference to STATICFILES_DIRS. I deleted all __pycache__ files and their folders, but the same identical error persisted. 

I looked at the source code that was generating the error:

      python3.11/site-packages/django/conf/__init__.py

specifically, line 278, which happens to be inside the definition of a class Settings.

        if self.is_overridden(""STATICFILES_STORAGE""):
            if self.is_overridden(""STORAGES""):
                raise ImproperlyConfigured(
                    ""STATICFILES_STORAGE/STORAGES are mutually exclusive.""
                )
The assumption seems to be that if both are overridden the dev is using both of them, and hence the error. Because I use white noise, it makes sense that STORAGES has been overridden. But since I have no reference to STATICFILES_STORAGE anywhere, it follows that the default value of global_settings is being inherited in my local settings, thus generating the error.  

django/django/conf/global_settings.py, line 630:

STATICFILES_STORAGE = ""django.contrib.staticfiles.storage.StaticFilesStorage""

The problem here is that on line 274 of the same file, we have:

STORAGES = {
    ""default"": {
        ""BACKEND"": ""django.core.files.storage.FileSystemStorage"",
    },
    ""staticfiles"": {
        ""BACKEND"": ""django.contrib.staticfiles.storage.StaticFilesStorage"",
    },
}

Are these constants mutually exclusive for everything ''but'' global_settings? I commented the entire block:

            # if self.is_overridden(""STATICFILES_STORAGE""):
            #     if self.is_overridden(""STORAGES""):
            #         raise ImproperlyConfigured(
            #             ""STATICFILES_STORAGE/STORAGES are mutually exclusive.""
            #         )
            #     warnings.warn(STATICFILES_STORAGE_DEPRECATED_MSG, RemovedInDjango51Warning)


And that worked:
        (chronicle-jltMOQ-O-py3.11) malikarumi@Tetuoan2:~/Projects/lifeandtimes/chronicle$ python manage.py runserver
        Watching for file changes with StatReloader
        Performing system checks...
        
        System check identified no issues (0 silenced).
"	Bug	new	File uploads/storage	4.2	Normal		mutually exclusive		Unreviewed	0	0	0	0	0	0
