在Django中,如何更改用户类以使用不同的数据库表?
我们正在使用 Django,并且与一个现有的应用程序共享同一个数据库。我们想用一个已经存在的“用户”表(不是 Django 自带的那个)来存储用户信息。
看起来可以通过在用户定义的 Meta 类中更改表名来实现这一点。
但我们更希望不去改动 Django 的核心部分。
所以我们在考虑可以像这样对核心的 auth.User 类进行子类化:
class OurUser(User) :
objects = UserManager()
class Meta:
db_table = u'our_user_table'
这里的目的是不想在自定义的用户类中添加额外的字段,而只是想使用另一个表。
然而,这样做失败了(可能是因为 ORM 假设我们的用户表应该有一个外键指向原来的用户表,但实际上并没有)。
那么,这样做是否合理呢?我是不是漏掉了更简单的方式来将类映射到表?如果没有的话,这样能否实现?
更新:
我觉得我可能只需在 local_settings.py 中“猴子补丁”一下 User 的 _meta,就能实现我想要的更改。
User._meta.db_table = 'our_user_table'
有没有人想到这样做可能会有什么坏处?(特别是在一个比较典型的 Django / Pinax 应用程序的上下文中?)