Автоматическое заполнение, когда syncdb с креплением для django-сайта

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

Ответ 1

Вы можете использовать интерфейс администратора, из оболочки или script (если вы ищете автоматическое решение). Вот как это сделать из оболочки (и что вы бы ввели в 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

Простым решением является создание элемента initial_data.json для приложения Sites, которое переопределит значение по умолчанию.

Например, мой светильник в /myproject/myapp/fixtures/initial _data.json:

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

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

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

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

Ответ 3

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

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.