2010-02-06 5 views
1
'scripts autonomes Django de

nous pouvons appeler cette «table autonome Djangoquelle est la façon la plus simple de créer une utilisation de table django db api, et la base sur

je ne réussis pas maintenant.

pouvez-vous ???

grâce

si vous ne connaissez pas 'scripts autonomes Django, regardez ce http://www.b-list.org/weblog/2007/sep/22/standalone-django-scripts/


2.Le est mon code:

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 

et mon problème est quand j'ajoute '#' devant 1 et 2, son erreur est:

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 

lorsque je supprime '#' devant 1 et 2, il n'imprime rien, et ne crée pas encore de table.

pourquoi?

+0

Vous allez devoir montrer votre code ici ou ils ne sauront pas de quoi vous parlez. –

Répondre

1

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.

+0

'myapp.models' est un fichier py ou un fichier créé par 'python manage.py startapp models' ??? – zjm1126

+0

salut synack, voir ma question 2, je le mettre à jour – zjm1126

+0

Bonjour, j'ai édité ma réponse pour la rendre plus facile à comprendre. – jathanism

Questions connexes