【问题标题】:Intermediate model Django ORM中间模型 Django ORM
【发布时间】:2012-09-29 16:11:08
【问题描述】:

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

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

【问题讨论】:

    标签: django code-snippets django-orm


    【解决方案1】:

    您的命名系统非常混乱。 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!)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      • 2017-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多