2013-06-17 5 views
1

Мне было интересно, как можно использовать модели вне Django manage.py.Django run models.py from command line

т. Е. Учитывая следующую комбинацию частей учебника, как я смогу только python models.py.

# models.py 
from django.db import models 

class Poll(models.Model): 
    question = models.CharField(max_length=200) 
    pub_date = models.DateTimeField('date published') 

class Choice(models.Model): 
    poll = models.ForeignKey(Poll) 
    choice = models.CharField(max_length=200) 
    votes = models.IntegerField() 

if __name__ == "__main__": 
    from polls.models import Poll, Choice 
    print Poll.objects.all() 
    import datetime 
    p = Poll(question="What's up?", pub_date=datetime.datetime.now()) 
    p.save() 
    print p.id 
    print p.question 
    print p.pub_date 
    p.pub_date = datetime.datetime(2007, 4, 1, 0, 0) 
    p.save() 
    print Poll.objects.all() 

Я попытался создать os.environ['DJANGO_SETTINGS_MODULE'] = ... в мой файл настроек, ни радости. , а затем изменили, что будет это в верхней

import imp 
imp.find_module('settings') # Assumed to be in the same directory. 

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

, но безрезультатно.

Любые идеи были бы благодарны полученному, это кажется типичным прецедентом.


Я понимаю, что Django имеет большую экосистему за ним, но я ожидал, что некоторые формы:

set-up-env 
do-stuff 

без необходимости писать сценарии чесотки.

+0

http://www.b-list.org/weblog/2007/ sep/22/standalone-django-scripts/ –

+0

Подождите ... вы попытались рассказать Django, где найти файл настроек * в файле настроек *? Как именно вы ожидали, что это сработает? –

+0

Я? Я чередовал два подхода, но я не сделал этого ясно. – reviver

ответ

1

запустить это от корня проекта директории: - он работает: D

import os 

import sys 

from django.conf import settings 
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 

sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)) + '/../') 

from django.db import models 

class Poll(models.Model): 

     question = models.CharField(max_length=200) 
     pub_date = models.DateTimeField('date published') 
     class Meta: 
      app_label = #app_name 

ваш второй класс

if __name__ == "__main__": 

     print Poll.objects.all() 
     import datetime 
     p = Poll(question="What's up?", pub_date=datetime.datetime.now()) 
     p.save() 
     print p.id 
     print p.question 
     print p.pub_date 
     p.pub_date = datetime.datetime(2007, 4, 1, 0, 0) 
     p.save() 
     print Poll.objects.all()