在Django模型方法中引用ManyToMany字段

时间:2019-07-15 19:00:25

标签: python django python-3.x django-models

我正在尝试在我的代码中引用UnitsAdd-Ons之间的ManyToMany连接,以启用提供价格的方法,但是我似乎无法在Model方法中引用该关系,有人可以指出我正确的方向吗?

class Unit(models.Model):
    class Meta:
        permissions = (
            ('generate_unit_csv', 'can generate unit csv'),
        )
        unique_together = ['building', 'unit_number', 'property']


    add_ons = models.ManyToManyField(
         'properties.RentalAddOns', related_name='add_on_units')
    ...


    def get_add_on_price(self):
        total_price = 0
        # there is no self.add_on_units or self.add_ons
        for add_on in self.add_on_units:
            total_price += add_on.price
        return total_price

调用该方法时,出现属性错误:

'Unit' object has no attribute 'add_on_units'

简单使用self.add_ons会得到:

'ManyRelatedManager' object is not iterable

1 个答案:

答案 0 :(得分:1)

在此模型中定义字段后,需要这样引用它。另外,您需要在结果管理器对象上使用all()方法来获取所有相关对象,以便可以对其进行迭代:

self.add_ons.all()

RentalAddOns模型实例中,您可以将所有Unit模型实例称为:

self.add_on_units.all()