Перебирайте два набора запросов, выделяя различия в Django - PullRequest
0 голосов
/ 30 сентября 2011

У меня есть класс модели, определенный ниже:

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)

1 Ответ

1 голос
/ 30 сентября 2011

Идея

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)
...