Django从命令行运行models.py.

时间:2013-06-17 08:35:21

标签: django django-models

我想知道如何在Django之外锻炼模型 manage.py控制。

即。鉴于以下教程部分的组合,我将如何才能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

无需编写管理脚本。

1 个答案:

答案 0 :(得分: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()