如何最好地初始化一次性的Django对象,这些对象不能成为固定装置?

时间:2012-05-10 00:43:38

标签: django django-models django-south django-fixtures

我正在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中,但我想在这里查看是否接受了加载固定物体的方法,这些物体不能作为固定装置装载。

1 个答案:

答案 0 :(得分:1)

您是否检查过南方的数据迁移? http://south.aeracode.org/docs/tutorial/part3.html

听起来可能就是你所需要的。