L'article que vous avez lié est une très bonne explication de la façon la plus simple de le faire.
Édition: Réorganisé pour plus de clarté. À partir d'une nouvelle application, créez un modèle, synchronisez la base de données pour créer les tables, puis utilisez la fonction setup_environ
à partir de votre script autonome.
Bien sûr, cela suppose que myapp
est dans votre PYTHONPATH
. Dans le cas contraire, vous devez ajouter le chemin de votre application avant de l'essayer de l'importer:
#!/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)
Edit # 2: En réponse au code mis à jour par l'OP. Vous essayez de créer un nouveau modèle à partir du script autonome, ce qui n'est pas la bonne approche. Un script autonome ne doit pas être utilisé pour créer de nouveaux modèles ou applications, mais plutôt pour référencer des données déjà existantes. Donc, en utilisant votre exemple, vous devrez créer une nouvelle application à partir d'un projet, puis créer un autre script à utiliser comme script autonome. Donc, je vais utiliser la création de standalone.py
à titre d'exemple.
C'est ce que la structure de fichier de D:\zjm_code\sphinx_test
devrait ressembler à:
sphinx_test
|-- __init__.py
|-- manage.py
|-- settings.py
`-- urls.py
Alors d'abord, vous devez créer une nouvelle application à partir de ce dossier de projet. Appelons-le file_test
et créez-le avec python manage.py startapp file_test
.Maintenant, l'arborescence des fichiers de D:\zjm_code\sphinx_test
devrait ressembler à ceci:
sphinx_test
|-- __init__.py
|-- __init__.pyc
|-- file_test
| |-- __init__.py
| |-- models.py
| |-- tests.py
| `-- views.py
|-- manage.py
|-- settings.py
|-- settings.pyc
`-- urls.py
Maintenant, vous pouvez créer votre modèle File
dans 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
Après avoir créé ce modèle, c'est là que vous exécuterez python manage.py syncdb
pour créer les tables modèles dans la base de données que vous avez configurée pour cette application.
Ensuite, vous pouvez créer standalone.py
qui a toute la logique de travailler avec le modèle file_test.models.File
vous venez de créer:
#!/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!'
Vous avez créé un script autonome qui peut interagir avec le Django ORM sans avoir besoin d'un serveur Web ou une instance de testserver en cours d'exécution. C'est pourquoi il est considéré comme autonome, car le nouveau script que vous avez créé peut être exécuté uniquement sur la ligne de commande.
Vous allez devoir montrer votre code ici ou ils ne sauront pas de quoi vous parlez. –