2012-09-29 1 views
1

관리자 용 차고 및 자동차를 만듭니다. 현재 차고에있는 모든 차량의 금전적 가치를 계산하려고합니다.중급 모델 Django ORM

def price_of_cars(request): 

    garages = Garage.objects.filter(..) # 

    total_price_of_cars_in_this_garages = 0 
    for a in garages: 
     for p in garages.cars: 
      total_price_of_cars_in_this_garages += (p.price * how_much) 


    return render_to_response('garage.html', 
    {'total_price_of_cars': total_price_of_cars_in_this_garages}) 

하지만 반환 :

class Car(models.Model): 
    name = models.CharField(max_length=50) 
    price = models.DecimalField()  

class GarageCar(models.Model): 
    car = models.ForeignKey('Car') 
    how_much = models.IntegerField() 

class Garage(models.Model): 
    name = models.CharField("Garage_Name", max_length=30) 
    cars = models.ManyToManyField('GarageCar', blank=True, null=True) 

나는 이런 식으로 뭔가를 시도 구문 오류가 나는 how_much 반환 오류 삭제하는 경우 : 'ManyRelatedManager'개체가

답변

3

귀하의 네이밍 시스템은 반복 가능한되지 않습니다 매우 혼란 스럽다. garage.cars은 자동차 모델이 있기 때문에 혼란 스럽지만 다른 모델을 의미합니다. how_much은 혼란 스럽습니다. quantity을 의미한다고 생각하기 때문에 가격이되어야합니다.

즉, how_muchprice_of_cars의 범위에 없기 때문에 첫 번째 오류가 발생합니다. 이 모델은 GarageCars 모델의 자산입니다.

다음으로는 cars을 반복 할 수 없습니다. 관리자입니다. 당신은 cars.all() 또는 cars.filter(..) 등 마지막

를 사용해야합니다, priceGarageCar 개체가 아니라 Car 객체 (나는 이름이 더 복잡하고 있다고 말했다 방법을 볼?) 그래서 우리는 cars의 속성이 아니다 p.price에서 p.car.price으로 변경해야합니다.

그래서 함께 넣어, 당신이 얻을해야이 같은 :

def price_of_cars(request): 
    garages = Garage.objects.filter(..) # 

    total_price_of_cars_in_this_garages = 0 
    for a in garages: 
     for p in garages.cars.all(): # changed to use .all() 
      total_price_of_cars_in_this_garages += (p.car.price * p.how_much) # changed to use correct properties (hopefully!)