soF*_*eld 11 django django-sites
我想在syncdb之后运行时填充django_site表我怎么能这样做我只有一个站点
Aks*_*lén 35
简单的解决方案是为站点应用程序创建一个initial_data.json fixture,它将覆盖默认值.
例如,我在/myproject/myapp/fixtures/initial_data.json的夹具:
[
{
"model": "sites.site",
"pk": 1,
"fields": {
"domain": "myproject.mydomain.com",
"name": "My Project"
}
}
]
Run Code Online (Sandbox Code Playgroud)
一点注意事项:因为这是整个项目的常用数据,所以将夹具存储到/ myproject/fixtures /或app/myproject/commons /(就像我这样做)可能是一个好主意,而不是只存储一些应用程序.这样可以使数据易于查找,并使应用程序更具可重用性.
第二个注意事项:Django允许在多个应用程序中使用多个initial_data.json装置(使用混合的initial_data.json和initial_data.yaml装置不能按预期工作:P).运行syncdb时,它们都将自动用于预填充数据库.
一些参考:
您可以从 shell 使用管理界面,也可以编写脚本(如果您正在寻找自动化解决方案)。以下是如何从 shell 执行此操作(以及您将放入脚本中的内容):
[sledge@localhost projects]$ python manage.py shell
>>> from django.contrib.sites.models import Site
>>> newsite = Site(name="Test",domain="test.com")
>>> newsite.save()
Run Code Online (Sandbox Code Playgroud)
如果您想自动执行此操作,请尝试此操作
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)
Run Code Online (Sandbox Code Playgroud)
只要执行管理命令,就需要运行该代码.所以你可以把它放进management/__init__.py
任何应用程序.然后只需添加SITE_ID
,SITE_NAME
和SITE_DOMAIN
你的settings.py
.
归档时间: |
|
查看次数: |
2799 次 |
最近记录: |