автоматическое заполнение при синхронизации с приспособлением для django-сайта - PullRequest
11 голосов
/ 14 октября 2010

я хочу заполнить таблицу django_site при запуске после syncdb изначально Как мне это сделать у меня только один сайт

Ответы [ 3 ]

35 голосов
/ 02 февраля 2012

Простым решением является создание фиксатора initial_data.json для приложения Сайты, которое будет переопределять значение по умолчанию.

Например, мой прибор в /myproject/myapp/fixtures/initial_data.json:

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

Небольшое примечание: поскольку это общие данные для всего проекта, было бы хорошей идеей сохранить приспособление в / myproject / fixtures / или в приложении / myproject / commons / (как я) вместо того, чтобы хранить его с приложением . Это позволяет легко находить данные и делает приложения более удобными для повторного использования.

Второе замечание: Django позволяет использовать несколько светильников initial_data.json в нескольких приложениях (хотя использование смешанного набора светильников initial_data.json и initial_data.yaml не работает должным образом: P). Все они будут автоматически использоваться для предварительного заполнения базы данных при запуске syncdb.

Некоторые ссылки:

5 голосов
/ 20 декабря 2011

Если вы хотите сделать это автоматически, попробуйте это

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)

Этот код необходимо запускать всякий раз, когда выполняется команда управления. Таким образом, вы можете поместить его в management/__init__.py для любого приложения. Затем просто добавьте SITE_ID, SITE_NAME и SITE_DOMAIN к вашему settings.py.

4 голосов
/ 14 октября 2010

Вы можете использовать интерфейс администратора из оболочки или написать скрипт (если вы ищете автоматизированное решение). Вот как это сделать из оболочки (и что вы бы поместили в скрипт):

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