我创建了我的经理车库和汽车。 我正在试图计算目前车库里所有车辆的货币价值。
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'对象不可迭代
答案 0 :(得分: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!)