Django:在syncdb上强制表创建顺序

时间:2011-05-23 21:01:11

标签: django django-orm django-syncdb

我有一个Profile模型,用于从auth应用程序为用户定义配置文件。此外,我有一个信号,每次创建用户时都会创建一个空的配置文件。

问题是,从clean开始时,在User表之后创建了Profile表,因此,当我被要求添加超级用户时,我的信号函数失败,因为没有Profile表输入空轮廓。

有没有办法强制syncdb创建表的顺序,以便在添加超级用户时已经创建了配置文件表?

2 个答案:

答案 0 :(得分:4)

执行以下操作之一:

  1. 修改您的信号以捕获此特定错误(表不存在)并忽略它。如果您需要为超级用户配置Profile,也无济于事。

  2. 在初始化整个数据库模式之前,请勿插入任何数据。您不必在syncdb期间创建超级用户,这可以稍后从开发控制台(django-admin.py shell)完成,或者您可以将超级用户的用户和配置文件放到在syncdb期间自动加载的应用程序initial_data.json夹具中。这将重置它在everrc上的信息,但在某些情况下它是可以接受的。

  3. 使用django-annoying lib中的AutoOneToOneField在第一次访问时自动创建个人资料。这就是我自己解决这个问题的方法 - 不需要用信号重做现有的功能。这是他们维基的一个例子:

    from annoying.fields import AutoOneToOneField
    
    class MyProfile(models.Model):
        user = AutoOneToOneField(User, primary_key=True)
    

答案 1 :(得分:1)

创建表的顺序取决于INSTALLED_APPS中它们的顺序

尝试使用以上django.contrib.auth

上的个人资料移动您的应用

除非您使用带有外键检查的数据库,否则可能需要先将User表放在第一位。