ChatGPT解决这个技术问题 Extra ChatGPT

How do I reference a Django settings variable in my models.py?

This is a very beginner question. But I'm stumped. How do I reference a Django settings variable in my model.py?

NameError: name 'PRIVATE_DIR' is not defined

Also tried a lot of other stuff including settings.PRIVATE_DIR

settings.py:

PRIVATE_DIR = '/home/me/django_projects/myproject/storage_dir'

models.py:

# Problem is here.
from django.core.files.storage import FileSystemStorage

fs = FileSystemStorage(location=PRIVATE_DIR)

class Customer(models.Model): 
    lastName = models.CharField(max_length=20) 
    firstName = models.CharField(max_length=20) 
    image = models.ImageField(storage=fs, upload_to='photos', blank=True, null=True)

What's the correct way to do this?

from django.conf import settings - docs.djangoproject.com/en/dev/topics/settings/…

G
Grzegorz

Try with this: from django.conf import settings then settings.VARIABLE to access that variable.

VARIABLE should be in capital letter. It will not work otherwise.


Something relevant: if you have several instances of settings_something.py due to a project deployed in several environments, do not try to import from app.settings. Overwritten variables in the other files won't take effect. Always use the import mentioned in this answer. It took me a few hours to realize what was going on in my project.
This works, if it is properly configured: with environment variable DJANGO_SETTINGS_MODULE or with manage.py command line parameter --settings=.. Read more in docs: docs.djangoproject.com/en/2.0/topics/settings
VAR should be capital latter otherwise it will not work
Thanks. Took a lot of time to figure this out. :)
p
poiuytrez
from django.conf import settings

PRIVATE_DIR = getattr(settings, "PRIVATE_DIR", None)

Where it says None, you will put a default value incase the variable isn't defined in settings.