[英]Django Aggregation: Sum of Multiplication of two fields that are not in same model
[英]Django Two Model Fields, same DB Column
我们正在尝试使用在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已经被使用”类型的错误。
是否有关于如何更好地采用我们正在尝试的方式的想法?
需要注意的一个细节是,我们只从该数据库中读取(没有更新),因此只读解决方案很好。
谢谢-RB
我已经解决了类似的问题(此代码应放在模型的定义之前):
from django.db.models.signals import class_prepared
def remove_field(sender, **kwargs):
if sender.__name__ == "MyModel":
sender._meta.local_fields.remove(sender.myFKField.field)
class_prepared.connect(remove_field)
( 在Django 1.5.11中测试 )
Django使用local_fields进行CREATE TABLE查询。
因此,我刚刚附加了class_prepared信号,并检查sender是否等于我期望的类。 如果是这样,我已经从该列表中删除了该字段。
之后,CREATE TABLE查询不包含具有相同db_column的字段,并且不会发生该错误。
但是,模型仍然可以正常工作(使用管理器方法正确地填充了从local_fields中移除的字段),我无法得知其真正的影响。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.