django完整性错误,我知道为什么,但不知道如何解决

时间:2013-07-31 18:16:37

标签: python django django-models database-migration

我改变了以前的用户模型,现在它继承了django的用户模型。

from django.contrib.auth.models import User

class UserProfile(User):
 #fields..

但其他模型指向我以前的模型,现在如果我想迁移,我收到错误:

(user_id)=(9) does not exist in auth_user table. 

合理的错误信息。但是我现在该怎么办?我真的被卡住了。我正在使用 django 1.4版

我制作了错误的屏幕截图:

enter image description here

1 个答案:

答案 0 :(得分:1)

你没有说你正在使用的Django版本;如果您使用1.5,那么您还需要设置AUTH_USER_MODEL设置以告知Django使用它(有关详细信息,请参阅auth docs)。如果您使用的是早期版本,则可能根本不想将User模型子类化,而是创建一个配置文件(如您的类名称所示)作为单独的模型并将其与ForeignKey链接(请参阅{{3更多关于那个)。

添加父类时是否也更改了模型的名称?您可能希望在UserProfile中设置表的名称,以使其与旧名称匹配。来自old profile docs

  

为了节省您的时间,Django会自动从模型类的名称和包含它的应用程序中派生数据库表的名称。模型的数据库表名称是通过将模型的“app label”(您在manage.py startapp中使用的名称)加入模型的类名称,并在它们之间加下划线来构建的。

     

例如,如果您有一个应用书店(由manage.py startapp bookstore创建),则定义为类Book的模型将具有名为bookstore_book的数据库表。

     

要覆盖数据库表名,请使用Meta。类中的db_table参数。

所以这样的事情可以解决问题:

class UserProfile(User):
    # other stuff
    class Meta:
        db_table = "myapp_user"

希望这有帮助!