Como faço referência a uma variável de configurações do Django em meu models.py?

124

Esta é uma pergunta muito inicial. Mas estou perplexo. Como faço referência a uma variável de configurações do Django em meu model.py?

NameError: name 'PRIVATE_DIR' is not defined

Também tentei muitas outras coisas, incluindo 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)

Qual é a maneira correta de fazer isso?

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

Respostas:

275

Tente com isso: from django.conf import settingsdepois settings.VARIABLEacessar essa variável.

Juankysmith
fonte
16
Algo relevante: se você tem várias instâncias de settings_something.pydevido a um projeto implantado em vários ambientes, não tente importar de app.settings. Variáveis ​​sobrescritas em outros arquivos não terão efeito. Sempre use a importação mencionada nesta resposta. Levei algumas horas para perceber o que estava acontecendo no meu projeto.
Ev.
1
Isso funciona, se estiver configurado corretamente: com a variável de ambiente DJANGO_SETTINGS_MODULE ou com o parâmetro de linha de comando manage.py --settings = .. Leia mais em docs.djangoproject.com/en/2.0/topics/settings
mirek
VAR deve ser maiúsculo, caso contrário, não funcionará
Saurabh Chandra Patel
91
from django.conf import settings

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

Onde diz None, você colocará um valor padrão caso a variável não esteja definida nas configurações.

HelpyHelperton
fonte