Как проще всего создать таблицу, используя django db api и опираясь на «автономные скрипты Django» - PullRequest
1 голос
/ 06 февраля 2010

мы можем назвать это «Автономный стол Джанго» * ​​1001 *

Я сейчас не успешен.

Вы можете ???

спасибо

если вы не знаете «автономные сценарии Django», посмотрите этот http://www.b -list.org / weblog / 2007 / sep / 22 / standalone-django-scripts /


2.Это мой код:

from django.core.management import setup_environ
from sphinx_test import settings

setup_environ(settings)

import sys
sys.path.append('D:\zjm_code\sphinx_test')


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

и моя проблема в том, что когда я добавляю '#' перед 1 и 2, это ошибка:

Traceback (most recent call last):
  File "D:\zjm_code\sphinx_test\books\models.py", line 17, in <module>
    class File(models.Model):
  File "D:\Python25\Lib\site-packages\django\db\models\base.py", line 52, in __new__
    kwargs = {"app_label": model_module.__name__.split('.')[-2]}
IndexError: list index out of range

когда я удаляю '#' перед 1 и 2, он ничего не печатает и еще не создает таблицу.

почему ??

1 Ответ

1 голос
/ 06 февраля 2010

Ссылка на статью является чертовски хорошим объяснением самого простого способа сделать это.

Редактировать: Переставить это для ясности.

Начиная со свежего приложения, создайте модель, синхронизируйте базу данных для создания таблиц, а затем используйте функцию 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 без необходимости запуска веб-сервера или экземпляра тестового сервера. Вот почему он считается автономным, поскольку созданный вами новый скрипт может быть выполнен только из командной строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...