【发布时间】:2016-11-10 06:09:31
【问题描述】:
我们正在尝试使用在 Django 之外生成且结构不理想的遗留数据库表。我们也不能修改现有的表。
数据库在所有表中使用相同的用户 ID (pk),无论是否存在该用户 ID 的记录。它还使用该 ID 作为其他表的 PK,而不是依赖它们自动增加自己的 ID。
所以想象下面这样的事情:
class Items(models.Model):
user_id = models.ForeignKey('User', db_column='UserID')
class User(models.Model):
user_id = models.IntegerField(primary_key=True)
class UserTypeA(models.Model):
user_id = models.IntegerField(primary_key=True) # Same Value as User
class UserTypeB(models.Model):
user_id = models.IntegerField(primary_key=True) # Same Value as User
我们在 Items 和 UserTypeA(以及 UserTypeB)之间创建关系的想法是创建另一个使用与 user_id 相同的列的字段条目。
class Items(models.Model):
user_id = models.ForeignKey('User', db_column='UserID')
user_type_a = models.ForeignKey('UserTypeA', db_column='UserID')
user_type_b = models.ForeignKey('UserTypeB', db_column='UserID')
不幸的是,这会返回“db_column is already used”类型错误。
关于如何更好地实现我们正在尝试做的事情的任何想法?
需要注意的一个细节是,我们只从这个数据库中读取(没有更新),所以只读解决方案很好。
谢谢, -RB
【问题讨论】:
-
我有点困惑:您的 Items 表中有相同的字段(UserID)指向两个不同的表(UserTypeA,UserTypeB)?如果是这样,您如何判断 Items 表中的特定条目指向哪个表?
-
它们在三个用户数据库中都使用相同的 ID 号,并且仅在“用户”模型上自动递增。例如,User 中的 ID=300 也将是 UserTypeA 中的 ID=300 和 UserTypeB 中的 ID=300(假设这些表中的任何一个表中都存在记录)。如果他们在每个“UserType”表中设计了具有唯一 PK 的数据,这会更容易。
-
嗯,我不确定这实际上是一个错误——你说的是系统检查
models.E007吗?你可以试试silencing 看看它是否有效...... -
拥有 UserTypeA 和 UserTypeB 是否有令人信服的理由?你不能用一张桌子,里面有一个标志吗?
-
如果值总是相同的,为什么要创建几个字段?
标签: python mysql django django-models