1

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

管理スクリプトを記述する必要はありません。

4

1 に答える 1

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

あなたの2番目のクラス

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()
于 2013-06-17T10:26:47.437 に答える