我正在Django中编写一个应用程序,它有一些我需要实例化的全站点固定对象,由于某种原因,它们不能成为固定装置。
例如,某些(例如Permission
s)我无法对PK进行硬编码,因为我无法确定它们是否会以某种顺序加载(如果我使用pk = null然后如果它们已经存在则会得到IntegrityError。)
其他人(例如Site
s)取决于settings.py
中的值。 编辑:这些需要在每次部署项目时运行,否则我可以按照super9的建议使用South的数据迁移。
由于这些是Django模型,因此它们与我项目中的任何应用程序都没有直接关系。在settings.py
加载它们是最有意义的,但这会导致循环导入。它适用于urls.py
但是加载代码似乎是hackish和out-place-place。
我考虑将接收器挂钩到post_syncdb
,如下所示:
@receiver(post_syncdb)
def create_groups_and_permissions(sender, **kwargs):
print "Creating groups and permissions"
u_ct = ContentType.objects.get(model="user")
Group.objects.get_or_create(name='Group 1')
Permission.objects.get_or_create(name="Perm 1", codename="perm_1", content_type=u_ct)
但是,由于我使用的是南方,因此documentation只会在首次创建表时发送post_syncdb
。我可以在每次迁移后手动调用syncdb
,但不愿意。{/ p>
我几乎决定将它们放在urls.py
或最密切相关的应用models.py
中,但我想在这里查看是否接受了加载固定物体的方法,这些物体不能作为固定装置装载。