2010-10-14 11 views

Respuesta

4

También se puede usar la interfaz de administración, desde el shell o guión (si está buscando una solución automatizada). Aquí es cómo hacerlo de la cáscara (y lo que se pone en el guión):

[[email protected] projects]$ python manage.py shell 
>>> from django.contrib.sites.models import Site 
>>> newsite = Site(name="Test",domain="test.com") 
>>> newsite.save() 
+2

Mi entendimiento es que los accesorios son la forma preferida de hacer esto. Vea la respuesta de @ Askell a continuación. – Josh

5

Si usted quiere hacer esto automáticamente, intente esto

from django.contrib import sites 
from django.db.models import signals 
from django.conf import settings 

def create_site(app, created_models, verbosity, **kwargs): 
    """ 
    Create the default site when when we install the sites framework 
    """ 
    if sites.models.Site in created_models: 
     sites.models.Site.objects.all().delete() 

     site = sites.models.Site() 
     site.pk = getattr(settings, 'SITE_ID', 1) 
     site.name = getattr(settings, 'SITE_NAME', 'Example') 
     site.domain = getattr(settings, 'SITE_DOMAIN', 'example.com') 
     site.save() 

signals.post_syncdb.connect(create_site, sender=sites.models) 

Ese código debe ejecutarse cada vez se ejecuta un comando de gestión. Entonces puedes ponerlo en management/__init__.py para cualquier aplicación. A continuación, solo agregue SITE_ID, SITE_NAME y SITE_DOMAIN en su settings.py.

35

La solución simple es crear un accesorio initial_data.json para la aplicación Sites que anulará el valor predeterminado.

Por ejemplo, mi accesorio en /myproject/myapp/fixtures/initial_data.json:

[ 
    { 
    "model": "sites.site", 
    "pk": 1, 
    "fields": { 
     "domain": "myproject.mydomain.com", 
     "name": "My Project" 
    } 
    } 
] 

Una pequeña nota: Debido a que este es de datos común para todo el proyecto, podría ser una buena idea para almacenar el accesorio a/myproject/fixtures/o a una aplicación/myproject/commons/(como yo) almacenando en su lugar con solo alguna aplicación. Esto permite que los datos sean fáciles de encontrar y hace que las aplicaciones sean un poco más reutilizables.

Una segunda nota: Django permite usar varios accesorios initial_data.json en varias aplicaciones (Sin embargo, el uso del conjunto mixto de datos initial_data.json y initial_data.yaml no funcionó como se esperaba: P). Todos ellos se usarán automáticamente para rellenar previamente la base de datos cuando se ejecute syncdb.

Algunas referencias:

Cuestiones relacionadas