2

我有一个 Profile 模型,用于为身份验证应用程序中的用户定义配置文件。另外,我有一个信号,每次创建用户时都会创建一个空配置文件。

问题是,从 clean 开始时,Profile 表是在 User 表之后创建的,所以,当我被要求添加超级用户时,我的信号功能失败,因为没有 Profile 表可以进入空配置文件。

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

4

2 回答 2

4

执行以下操作之一:

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

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

  3. 首次访问时使用AutoOneToOneFieldfrom lib 自动创建 Profile。django-annoying这就是我自己解决这个问题的方法——不需要用信号重做现有的功能。以下是他们 wiki 中的一个示例:

    from annoying.fields import AutoOneToOneField
    
    class MyProfile(models.Model):
        user = AutoOneToOneField(User, primary_key=True)
    
于 2011-05-23T21:28:26.710 回答
1

创建表的顺序取决于您在 INSTALLED_APPS 中的顺序

尝试使用 django.contrib.auth 上方的 Profile 移动您的应用

除非您使用带有外键检查的数据库,在这种情况下,可能需要首先使用 User 表。

于 2011-05-23T21:04:48.113 回答