我在Django(1.11)中有这些模型:
class Provider(models.Model):
name = models.CharField(max_length=200)
def get_contracts_number(self, kwargs):
total = 0
for offer in self.offer_set.all():
total += offer.get_contracts_number(kwargs)
return total
class Offer(models.Model):
name = models.CharField(max_length=200)
provider = models.ForeignKey("Provider", on_delete=models.CASCADE)
def get_contracts_number(self, kwargs):
total = 0
total += self.contract_elec_set.filter(**kwargs).count()
total += self.contract_gas_set.filter(**kwargs).count()
total += self.contractgastank_set.filter(**kwargs).count()
total += self.contractboilerinstallation_set.filter(**kwargs).count()
total += self.contractboilermaintenance_set.filter(**kwargs).count()
total += self.contractcomble_set.filter(**kwargs).count()
total += self.contractinsurance_set.filter(**kwargs).count()
return total
class Contract_elec(models.Model):
offer = models.ForeignKey(
"Offer", on_delete=models.SET_NULL, verbose_name="Offre", null=True
)
date_lead = models.DateTimeField()
class Contract_gas(models.Model):
offer = models.ForeignKey(
"Offer", on_delete=models.SET_NULL, verbose_name="Offre", null=True
)
date_lead = models.DateTimeField()
依此类推(我总共有7种合同类型)。 不同的合同类型可以指向相同的报价。
当date_lead>到一个选定的日期时,我希望计算每个提供商的所有合同(包括其所有报价)。 我设法用我的两个方法get_contracts_number来做到这一点,但我认为这确实没有优化。我尝试了一些带有注释和聚合的东西,但没有太大结果。
我该怎么办? 预先感谢