Исключая методы в контексте проекта Django? - Джанго - PullRequest
0 голосов
/ 26 декабря 2010

Мне нужно выполнить несколько методов в контексте моего проекта Django, чтобы работать с моделями.

Я знаю, что команды существуют, но я хотел бы импортировать эти методы и выполнять их в коде Python.


Есть идеи?

Ответы [ 2 ]

2 голосов
/ 26 декабря 2010

Большинство моих сценариев командной строки (и cron) выглядят примерно так:

#!/usr/bin/env python

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

... code ...

# you need to do the followng before exit if you did any DB changes.
transaction.commit_unless_managed()

Обновление для комментариев:

Если вы сделали какие-либо сохранения / другие изменения, тогда мой (возможно, несколько устаревший) ответ - Да. Я не знаю, требуется ли это в последнем стабильном выпуске, но я вроде человека с поясом, когда дело доходит до моей базы данных. Я вижу transaction.commit_unless_managed() в конце моих сценариев как своего рода сеть безопасности: если управляемый режим действует, то это NOP, если не , то это гарантирует, что фиксация произойдет. 1011 *

2 голосов
/ 26 декабря 2010

Вам нужно только установить переменные окружения PYTHONPATH и DJANGO_SETTINGS_MODULE до вызова интерпретатора python. С этого момента вы можете импортировать свои модели, вызывать их методы и т. Д. *

export PYTHONPATH="...include your site's apps path..."
export DJANGO_SETTINGS_MODULE="mysite.settings"
python
>>> from myapp.models import MyModel
>>> MyModel.objects.all()
...
...