1

我创建我的经理车库和汽车。我正在尝试计算目前在车库中的所有汽车的货币价值。

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' 对象不可迭代

4

1 回答 1

3

您的命名系统非常混乱。 garage.cars令人困惑,因为有一个汽车模型,但这意味着一个不同的模型。 how_much令人困惑,因为我认为您的意思是quantity尽管它看起来应该是一个价格。

也就是说,您得到的第一个错误将是因为how_much不在price_of_cars. 这是GarageCars模型的属性。

接下来,你不能这样迭代cars,它是一个经理。你必须使用cars.all()cars.filter(..)

最后,priceis not a property of cars,它是一个GarageCar对象而不是一个Car对象(看看我说的名字让它更混乱了吗?)所以我们需要更改p.pricep.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!)
于 2012-09-29T16:32:01.217 回答