Skip to main content
 首页 » 编程设计

python之Django : Two Models from Separate Databases

2024年11月01日27me-sa

我是 Django 的新手;我有一个遗留数据库,我无法控制一些关于用户的信息和我服务器上的一个数据库,其中包含与用户正在做的事情有关的数据。我想通过 Django 使用的 ORM 方法从每个数据库中获取一些信息并将其显示在网络表单上,但我正在努力。我搜索患者 ID,可以找到与他们相关联的代码,但是当涉及到显示每个代码与相关数据的成本时,我不知道这样做的最佳方法。我目前不保存此数据。

(我的数据库)

class Data(models.Model): 
    code = models.CharField(max_length=12) 
    cost = models.FloatField() 
    unit = models.CharField(max_length=2) 

(旧版)

class UserHistory(models.Model) 
   userid= models.IntegerField(db_column='userid', blank=True, null=True)  
   code = models.CharField(db_column='code', max_length=11, blank=True) 
   firstname = models.CharField(db_column='FirstName', max_length=35, blank=True)  
   middlename = models.CharField(db_column='MiddleName', max_length=35, blank=True)  
   lastname = models.CharField(db_column='LastName', max_length=35, blank=True)  

期望的输出:

这是用户名字姓氏的费用

Last Name |  First Name |    Code  |  Cost 
----------+-------------+----------+-------- 
xxx       |     zzzzz   |       2  |  10.00 
xxx       |     zzzzz   |       6  |  10.00 
xxx       |     zzzzz   |       7  |  10.00 
xxx       |     zzzzz   |      11  |  10.00 

请您参考如下方法:

它在 Django 文档中:https://docs.djangoproject.com/en/dev/topics/db/multi-db/ ,特别是你可以创建 two querysets from different databases .

您必须从第一个查询集中获得结果,export them as a list并使用该列表查询第二个数据库 ( using the in operator )。

示例:

 user = UserHistory.objects.using('legacy').filter(firstname='John', lastname='Doe') 
 codes = list(users.values_list('code', flat=True)) 
 costs = Data.objects.using('default').filter(code__in=codes) 

您可以使用聚合(例如 Sum)或直接将 costs 查询集传递给您的 RequestContext。

编辑: 该示例返回单个用户的所有 Data。从 user 变量,您可以访问所有用户属性(例如 user.middlename)。