2011-09-30 43 views
0

我有一个模型类定义如下:环路通过两个查询集,而在Django突出差异

class Vehicle(models.Model): 
    stock_number = models.CharField(max_length=6) 
    vin = models.CharField(max_length=17) 
    year = models.PositiveSmallIntegerField() 
    manufacturer = models.CharField(max_length=15) 
    manufacturer_popularity = models.CharField(max_length=1, blank=True, null=True) 
    model = models.CharField(max_length=20) 
    series = models.CharField(max_length=35, blank=True, null=True) 
    exterior_colour = models.CharField(max_length=25) 
    interior_colour = models.CharField(max_length=25) 
    interior_type = models.CharField(max_length=25) 
    doors = models.PositiveSmallIntegerField() 
    passengers = models.PositiveSmallIntegerField() 
    body_style = models.CharField(max_length=30) 
    transmission = models.CharField(max_length=50) 
    fuel_type = models.CharField(max_length=50) 
    engine_capacity = models.DecimalField(max_digits=2, decimal_places=1) 
    cylinders = models.PositiveSmallIntegerField() 
    drive_train = models.CharField(max_length=50) 

我想要做的就是基于上面的类来查询两个数据库,然后在模板中显示的数据同时以红色显示每个配对车辆条目之间的差异。该查询位并不是主要的问题,我想,因为我需要这样的东西:

set1 = Vehicle.objects.all() 
set2 = Vehicle.objects.using('other_db').all() 

但我怎么能已经配对,并显示被处理?我希望有人能让我看到这里的光芒。

更新1

vehicles = [] 
for v1 in set1: 
    for v2 in set2: 
     if v1['stock_number'] == v2['stock_number']: 
      vehicle1 = vehicle2 = {} 
      vehicle1['vehicle_1'] = v1 
      vehicle2['vehicle_2'] = v2 
      vehicles.append(vehicle1) 
      vehicles.append(vehicle2) 
     else: 
      vehicle1 = vehicle2 = {} 
      vehicle1['vehicle_1'] = v1 
      vehicle2['vehicle_2'] = {} 
      vehicles.append(vehicle1) 
      vehicles.append(vehicle2) 
+0

你知不知道你是否会有之间的DB的一个1:1的比例的想法?有没有一些钥匙可以用来确保你同时谈论同一辆车? – cwallenpoole

+0

为什么我需要该视图的一部分是为了确保1比1的比例,但是,有一种关键点我猜...股票数字应该在数据库之间匹配,这就是唯一标识每条记录的唯一标识。 ..如果不是,那对将只有一个项目,无论哪个数据库有记录 –

回答

1

from itertools import izip 

for obj1, obj2 in izip(set1, set2): 
    for field in obj1._meta.fields: 
     if field.value_from_object(obj1) == field.value_from_object(obj2): 
      print 'Same value', field.value_from_object(obj1) 
     else: 
      print 'Obj1 has', field.value_from_object(obj1) 
      print 'Obj2 has', field.value_from_object(obj2) 
+0

根据你的想法上面,我试图从两个查询集建立一个嵌套的字典,但似乎这个过程是太CPU密集型,需要永远完成。根据您的上述样本,我的想法是否正确?请看看我添加的代码...这就是我正在使用的。目前每个查询集约有670条记录 –

+0

@Stephen M我的代码有什么问题?你有尝试去适应它吗?我的代码将进行670次迭代和你的--670 * 670次迭代。你想得到什么结果?你能举一个例子:这里是set1,这里是set2,这是我想要得到的吗? – DrTyrsa

+0

我的糟糕之处在于不回复年龄...您的代码运行良好。日Thnx –