从Django中的模型属性访问ManyToMany关系

时间:2020-10-09 14:28:01

标签: django

我有一个具有某些关系的贷款模型,其中一个与Resource模型(借款人借出的项目)的关系是多对多的。我想在贷款中添加一个派生属性,以快速检查贷款各种资源的状态。但是,每当我尝试从该属性中访问贷款的资源时,我都只会获得None。它适用于一对一关系,但不是很多对很多。

class Loan(models.Model):
    borrower = models.ForeignKey('Borrower', on_delete=models.PROTECT)
    resources = models.ManyToManyField('Resource', through='LoanedResource', blank=True)
    start_date = models.DateTimeField()
    due_date = models.DateTimeField()

    @property
    def is_closed(self):
        print(self.borrower) # Works!

        print(self.resources) # None :(
        print(self.loanedresources_set) # None :(

        print(LoanedResource.objects.filter(loan = self.id)) # This works, but I believe it bypasses prefetch_related, so gets really slow. 

        # Return my calculated value here

如果这行不通,那么有人对如何利用prefetch_related建立具有多对多关系的派生属性有想法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以通过以下方式访问M2M对象

self.resources.all()