小编典典

Django脚本,无需使用manage.py shell即可访问模型对象

django

我正在编写一个脚本,将一些模型对象导入到我的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)

阅读 684

收藏
2020-03-26

共2个答案

小编典典

你需要先设置django环境:

from your_project import settings
from django.core.management import setup_environ
setup_environ(settings)

最后导入你的模型,一切就像django一样。

2020-03-26
小编典典

从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)
2020-03-26