2012-09-29 61 views
1

我創建我的經理車庫和汽車。 我試圖計算當前車庫中所有車輛的貨幣價值。中級模型Django ORM

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) 

我嘗試這樣:

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

但返回:語法錯誤,如果我刪除how_much返回錯誤:'ManyRelatedManager' 對象不是可迭代

回答

3

你的命名系統很混亂。 garage.cars令人困惑,因爲有一個汽車模型,但它意味着一個不同的模型。 how_much令人困惑,因爲我認爲你的意思是quantity,儘管它看起來應該是一個價格。

也就是說,您得到的第一個錯誤將是因爲how_much不在price_of_cars的範圍內。這是GarageCars模型的一個屬性。

接下來,你不能像這樣遍歷cars,它是一個經理。你將不得不使用cars.all()cars.filter(..)

最後,price不是cars一個屬性,它是一個GarageCar對象不是Car對象(看我怎麼說,名字被使其更加混亂?)所以我們需要將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!)