2010-10-14 10 views

risposta

4

è possibile utilizzare l'interfaccia di amministrazione, da la shell, o script it (se stai cercando una soluzione automatizzata). Ecco come farlo dalla shell (e quello che si potrebbe mettere in script):

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

mia comprensione è che gli impianti sono il modo migliore di fare questo. Vedi la risposta @ di Askell qui sotto. – Josh

5

Se si vuole fare questo automaticamente, provate questo

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) 

Questo codice deve essere eseguito ogni volta che viene eseguito un comando di gestione. Quindi potresti metterlo in management/__init__.py per qualsiasi app. Quindi aggiungi solo SITE_ID, SITE_NAME e SITE_DOMAIN al numero settings.py.

35

La soluzione semplice consiste nel creare un dispositivo initial_data.json per l'app Sites che sovrascriverà il valore predefinito.

Ad esempio, il mio dispositivo a /myproject/myapp/fixtures/initial_data.json:

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

Una piccola nota: Poiché si tratta di dati comune per l'intero progetto, potrebbe essere una buona idea per memorizzare l'apparecchio su/myproject/fixtures/o su un'app/myproject/commons/(come faccio io) invece di memorizzarlo con solo nell'app. Ciò consente di trovare facilmente i dati e rende le app un po 'più riutilizzabili.

Una seconda nota: Django consente di utilizzare più dispositivi initial_data.json in più app (l'utilizzo di set misti di initial_data.json e initial_data.yaml fixtures non ha funzionato come previsto: P). Verranno automaticamente utilizzati per pre-compilare il database quando viene eseguito syncdb.

Alcune referenze:

Problemi correlati