¿Cómo hago referencia a una variable de configuración de Django en mi models.py?

124

Esta es una pregunta muy para principiantes. Pero estoy perplejo. ¿Cómo hago referencia a una variable de configuración de Django en mi model.py?

NameError: name 'PRIVATE_DIR' is not defined

También probé muchas otras cosas, incluidas settings.PRIVATE_DIR

settings.py:

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

modelos.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)

¿Cuál es la forma correcta de hacer esto?

codingJoe
fuente
7
from django.conf import settings- docs.djangoproject.com/en/dev/topics/settings/…
wkl

Respuestas:

275

Pruebe con esto: from django.conf import settingsluego settings.VARIABLEpara acceder a esa variable.

juankysmith
fuente
16
Algo relevante: si tienes varias instancias de settings_something.pydebido a un proyecto implementado en varios entornos, no intentes importar desde app.settings. Las variables sobrescritas en los otros archivos no tendrán efecto. Utilice siempre la importación mencionada en esta respuesta. Me tomó unas horas darme cuenta de lo que estaba pasando en mi proyecto.
Ev.
1
Esto funciona, si está configurado correctamente: con la variable de entorno DJANGO_SETTINGS_MODULE o con el parámetro de línea de comando manage.py --settings = .. Leer más en docs: docs.djangoproject.com/en/2.0/topics/settings
mirek
El VAR debería ser el último en mayúsculas, de lo contrario no funcionará
Saurabh Chandra Patel
91
from django.conf import settings

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

Donde dice None, pondrá un valor predeterminado en caso de que la variable no esté definida en la configuración.

HelpyHelperton
fuente