我有一个Profile模型,用于从auth应用程序为用户定义配置文件。此外,我有一个信号,每次创建用户时都会创建一个空的配置文件。
问题是,从clean开始时,在User表之后创建了Profile表,因此,当我被要求添加超级用户时,我的信号函数失败,因为没有Profile表输入空轮廓。
有没有办法强制syncdb创建表的顺序,以便在添加超级用户时已经创建了配置文件表?
答案 0 :(得分:4)
执行以下操作之一:
修改您的信号以捕获此特定错误(表不存在)并忽略它。如果您需要为超级用户配置Profile,也无济于事。
在初始化整个数据库模式之前,请勿插入任何数据。您不必在syncdb期间创建超级用户,这可以稍后从开发控制台(django-admin.py shell
)完成,或者您可以将超级用户的用户和配置文件放到在syncdb期间自动加载的应用程序initial_data.json
夹具中。这将重置它在everrc上的信息,但在某些情况下它是可以接受的。
使用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表放在第一位。