47

setup_environ()前一阵子写了一个一次性的 python 脚本,从命令行运行,它根本不适合作为自定义 manage.py 命令(我的首选)。它很好地设置了一切。我假设我们弃用了这个函数,因为非 django pythonistas 拿 djangonauts 取笑这种神奇的东西,我们厌倦了感觉肮脏。那么,如果它已被弃用,还有什么替代方案?也许这是一个懒惰的问题,但我需要运行什么来代替 setup_environ 来达到相同的效果?我想我可以将函数复制/粘贴到我的脚本中,但我假设这不是弃用它的目的。(显然我仍然可以使用已弃用的函数,但我希望我的脚本能够在几个版本的 django 中存活)

4

6 回答 6

61

这在Django 1.7中发生了变化

import os
import django
from myapp import models

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
django.setup()

print models.MyModel.objects.get(pk=1)
于 2014-03-28T20:16:52.337 回答
28

扩展 miki725 的答案,如果你有

from django.core.management import setup_environ

import fooproject.settings as settings
setup_environ(settings)

只需替换为

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "fooproject.settings")
from django.conf import settings

并且您的设置将作为设置加载。

对于 Django 1.7+,请参阅 Ben Davis 的解决方案。

于 2014-01-15T22:45:02.950 回答
21

Django 1.4 release notes 官方推荐使用django.conf.settings.configure()来设置设置。这对于您需要以“pythonic”方式完成所有操作的小型脚本来说非常有用。但是,如果您有一个更大的项目,我喜欢使用 Django 方法,即有一个单独的设置模块/包,然后是DJANGO_SETTINGS_MODULE环境变量中的路径。这是用于manage.py

# manage.py

# ...
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "fooproject.settings")
# ...

发布文档可以在这里找到。

于 2013-02-24T05:53:20.793 回答
2

要添加 Leandro N 所说的内容(谢谢,Leandro!),您必须添加 django.setup()。

例如,我的代码:

import os, django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
django.setup()
from app.models import ModelA, ModelB

仅供参考,我在 Django 1.10 上。

于 2017-03-06T06:01:38.187 回答
2

我正在使用 Django 2.0,Ben Davis 很接近,但我无法让它工作。似乎对我有用的是

import os
import sys
import django

sys.path.append("/path/to/django/project") #only required if project not already in path
os.environ.setdefault('DJANGO_SETTINGS_MODULE','myapp.settings')

django.setup() #run django.setup BEFORE importing modules to setup the environ
from myapp.models import Thingy

t=Thingly.objects.all()

print(t)
于 2018-08-31T21:30:32.490 回答
1

免责声明:我使用的是 Django 1.8

只需添加我的 2 美分:我已经尝试了此页面中提供的一些解决方案,但它们根本不起作用。我刚刚想出了一个解决方案,我将在下面分享。

确保您位于项目的根文件夹中。所在manage.py的位置相同。

#make sure basic imports are in place
>>> import os,django

#set the specific django settings file
>>> os.environ.setdefault("DJANGO_SETTINGS_MODULE", "main.settings.base")

# import your modules and use them just like you do in your
# web apps
>>> from apps.customers import models as c

# normal usage... for instance:
>>> dir(c)
['You', 'Will', 'See', 'Your', 'Models', ... ]
于 2016-02-25T20:34:31.033 回答