2010-10-14 2 views

Répondre

4

Vous pouvez utiliser l'interface d'administration, de le shell, ou le script (si vous cherchez une solution automatisée). Voici comment faire de la coquille (et ce que vous mettriez dans le 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

je crois comprendre que les appareils sont la meilleure façon de le faire. Voir la réponse d'Askell ci-dessous. – Josh

5

Si vous voulez faire cela automatiquement, essayez cette

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) 

Ce code doit être exécuté à chaque fois une commande de gestion est exécutée. Donc, vous pouvez le mettre dans management/__init__.py pour n'importe quelle application. Ensuite, il suffit d'ajouter SITE_ID, SITE_NAME et SITE_DOMAIN à votre settings.py.

35

Une solution simple consiste à créer un appareil initial_data.json pour l'application Sites qui remplacera la valeur par défaut.

Par exemple, mon appareil à /myproject/myapp/fixtures/initial_data.json:

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

Une petite note: Parce que ce sont des données communes pour l'ensemble du projet, il pourrait être une bonne idée de stocker l'appareil à/myproject/appareils/ou à une application/myproject/commons/(comme je le fais) au lieu de le stocker avec juste quelques app. Cela permet aux données d'être faciles à trouver et rend les applications un peu plus réutilisables.

Une deuxième remarque: Django permet d'utiliser plusieurs projecteurs initial_data.json dans plusieurs applications (L'utilisation d'un ensemble mixte de projecteurs initial_data.json et initial_data.yaml n'a pas fonctionné comme prévu: P). Ils seront tous automatiquement utilisés pour pré-remplir la base de données lors de l'exécution de syncdb.

Quelques références:

Questions connexes