Я хочу заполнить таблицу django_site при первом запуске после syncdb Как мне это сделать У меня только один сайт
Автоматическое заполнение, когда syncdb с креплением для django-сайта
Ответ 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
.