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?


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.