2011-09-30 5 views
0

장고에 강조의 차이는 다음과 같이 정의하면서 :루프는 내가 모델 클래스가

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

그러나 어떻게 페어링 및 디스플레이가 처리되고 내가 한 수 : 질의 비트는 내가 좋아하는 뭔가를해야하기 때문에 내가 추측하는 주요 문제가되지 않습니다? 누군가가 내게 빛을 보여줄 수 있기를 바랍니다.

UPDATE 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 비율을 보장하는 것입니다. 그렇습니다. 일종의 열쇠가 있습니다. 주식 번호는 DB 사이에서 일치해야하며, 이는 각 레코드를 고유하게 식별합니다. .. 그때 그 쌍은 레코드가있는 DB에 대해서만 하나의 아이템을 가질 것입니다. –

답변

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 번의 반복 작업을 수행합니다. 그 결과로 얻고 싶은 것은 무엇입니까? 예를 보여 주시겠습니까? 여기 set1, 여기 set2, 내가 원하는 것은 무엇입니까? – DrTyrsa

+0

연령대에 대해 답하지 않는 것이 좋지 않습니다 ... 코드가 잘 작동합니다. Thnx –