我有一个具有某些关系的贷款模型,其中一个与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建立具有多对多关系的派生属性有想法吗?
谢谢!
答案 0 :(得分:1)
您可以通过以下方式访问M2M对象
self.resources.all()