Tri*_*daz 65 python django django-models
我正在编写一个脚本,将一些模型对象导入我的django应用程序使用的数据库中.在过去,我通过运行./manage.py shell然后解决了这个问题import myscript.我相信有更好的方法.我希望能够从我的HD上的任何地方调用脚本python scriptname.py,并且在该脚本的前几行中它将执行任何必要的导入/其他操作,以便它可以访问模型对象并且表现得好像它已经运行使用manage.py shell.
我需要添加到脚本中才能实现此目的?
编辑:
基于@Melug的回答,添加了动态设置的Python路径来解决问题中的"我的HD上的任何地方"部分:
import sys
sys.path.append('c:\\my_projec_src_folder')
from myproject import settings
from django.core.management import setup_environ
setup_environ(settings)
Mic*_*ael 128
从Django 1.4开始,你应该避免使用setup_environ(settings)(由Melug发布),因为它已被弃用.请改用以下内容,您将能够访问您的模型
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project_name.settings")
# your imports, e.g. Django models
from your_project_name.models import Location
# From now onwards start your script..
以下是访问和修改模型的示例:
if __name__ == '__main__':    
    # e.g. add a new location
    l = Location()
    l.name = 'Berlin'
    l.save()
    # this is an example to access your model
    locations = Location.objects.all()
    print locations
    # e.g. delete the location
    berlin = Location.objects.filter(name='Berlin')
    print berlin
    berlin.delete()
示例型号:
class Location(models.Model):
    name = models.CharField(max_length=100)
Reb*_*ebs 102
为了让模型加载,我不得不将这个与这个答案结合起来,否则我会得到django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_project.settings")
import django
django.setup()
作为额外的,我将其添加到__init__.py我的django项目中,它将自动发现应用程序名称,以便它可以复制/粘贴:
import os
def setup():
    module = os.path.split(os.path.dirname(__file__))[-1]
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{}.settings".format(module))
    import django
    django.setup()
然后我可以这样做:
from <app> import setup
setup()
Alk*_*dus 26
对于Django 1.9或更高版本,您可以使用:
import sys
import os
import django
sys.path.append('your_project_directory')
os.environ['DJANGO_SETTINGS_MODULE'] = 'your_project.settings'
django.setup()
from yourapp.models import your_model
所以你可以使用对象作为相同的django对象:
from myapp.models. import Locations
all_locations = Locations.object.all()
first_location = Locations.object.get(id=1)
print first_location.name()
first_location.save()
Mel*_*lug 22
您需要先设置django环境:
from your_project import settings
from django.core.management import setup_environ
setup_environ(settings)
最后导入你的模型,一切都像django.
对于DJANGO 1.11
上层解决方案不起作用,但给了我一个错误:
django.core.exceptions.AppRegistryNotReady:应用尚未加载。
对我来说,这里的解决方案:
import os
from django.core.wsgi import get_wsgi_application
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'
application = get_wsgi_application()
| 归档时间: | 
 | 
| 查看次数: | 50863 次 | 
| 最近记录: |