Ссылка на статью является чертовски хорошим объяснением самого простого способа сделать это.
Редактировать: Переставить это для ясности.
Начиная со свежего приложения, создайте модель, синхронизируйте базу данных для создания таблиц, а затем используйте функцию setup_environ
в вашем автономном скрипте.
Конечно, это предполагает, что myapp
находится в вашем PYTHONPATH
. Если это не так, вы должны добавить путь к своему приложению, прежде чем пытаться импортировать его:
#!/usr/bin/env python
from django.core.management import setup_environ
# If myapp is not in your PYTHONPATH, append it to sys.path
import sys
sys.path.append('/path/to/myapp/')
# This must be AFTER you update sys.path
from myapp import settings
setup_environ(settings)
from myapp.models import Foo, Bar
# do stuff
foo = Foo.objects.get(id=1)
bar = Bar.objects.filter(foo=foo.baz)
Редактировать # 2: В ответ на обновленный код OP. Вы пытаетесь создать новую модель из автономного скрипта, что не является правильным подходом. Автономный скрипт не должен использоваться для создания новых моделей или приложений, а скорее для ссылки на уже существующие данные.
Так что, используя ваш пример, вам нужно будет создать новое приложение из проекта, а затем создать другой скрипт для использования в качестве автономного скрипта. Поэтому я буду использовать создание standalone.py
в качестве примера.
Вот как должна выглядеть файловая структура D:\zjm_code\sphinx_test
:
sphinx_test
|-- __init__.py
|-- manage.py
|-- settings.py
`-- urls.py
Итак, сначала вам нужно будет создать новое приложение из этой папки проекта. Давайте назовем это file_test
и создадим его с python manage.py startapp file_test
. Теперь дерево файлов D:\zjm_code\sphinx_test
должно выглядеть так:
sphinx_test
|-- __init__.py
|-- __init__.pyc
|-- file_test
| |-- __init__.py
| |-- models.py
| |-- tests.py
| `-- views.py
|-- manage.py
|-- settings.py
|-- settings.pyc
`-- urls.py
Теперь вы можете создать свою File
модель в file_test\models.py
:
from django.db import models
from djangosphinx.models import SphinxSearch,SphinxQuerySet
class File(models.Model):
name = models.CharField(max_length=200)
tags = models.CharField(max_length=200)
objects = models.Manager()
search = SphinxQuerySet(index="test1")
#class Meta:#<----------- 1
# app_label = 'sphinx_test'#<------ 2
После создания этой модели вы должны выполнить python manage.py syncdb
, чтобы создать таблицы моделей в базе данных, настроенной для этого приложения.
Затем вы можете создать standalone.py
, который имеет всю логику для работы с file_test.models.File
моделью, которую вы только что создали:
#!/path/to/python
from django.core.management import setup_environ
import sys
sys.path.append('D:\zjm_code\sphinx_test')
from sphinx_test import settings
setup_environ(settings)
# NOW you can import from your app
from sphinx_test.file_test.models import File
f = File(name='test', tags='abc,xyz,', search='foo')
f.save()
# confirm the data was saved
if f.id:
print 'success!'
else:
print 'fail!'
Вы создали автономный скрипт, который может взаимодействовать с Django ORM без необходимости запуска веб-сервера или экземпляра тестового сервера. Вот почему он считается автономным, поскольку созданный вами новый скрипт может быть выполнен только из командной строки.