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(..)などを使用する必要があります

最後に、オブジェクトではなくオブジェクトであるpriceのプロパティではありません(名前が混乱を招くと私が言った方法を参照してください)。したがって、 に変更する必要があります。carsGarageCarCarp.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 に答える