【问题标题】:Django sum objects filtering another modelDjango sum 对象过滤另一个模型
【发布时间】:2021-01-26 23:16:47
【问题描述】:

我有这 3 个模型:

class Provider(models.Model):
        name = models.CharField("Provider",max_length=200)
        def __str__(self):

            return  self.name

class Contract(models.Model):
        active = models.BooleanField(default=False, verbose_name="Active?")
        provider = models.ForeignKey(Provider, on_delete=models.CASCADE,verbose_name="Provider")
        total_to_spent = models.IntegerField(blank=True, null=True, verbose_name="Total to spend")

        def __str__(self,):
            return str(self.id) + '- ' + str(self.provider)
            
            
class Invoice(models.Model):
        contract = models.ForeignKey(Contract, on_delete=models.CASCADE,verbose_name="Contract",related_name='ContractObject',)
        value = models.IntegerField(verbose_name="Value")
        
        def __str__(self,):
            return  str(self.contract)  
Contract.model 中的

total_to_spent 是我可以在该合同中花费的金额

Invoice.model 中的

value 是与该发票相关的金额,然后与合同相关联

我的看法

def ServicoView(request):
    contracts = Contract.objects.all()
    contract_active = Contract.objects.filter(active=True)
    contratos_finish = Contract.objects.filter(active=False)

    //i was trying something like this 
    for i in contracts:
        invoices= Invoice.objects.filter(contract=contract['id']).values().aggregate(total=Sum('value '))

    context = {
        'contract_active': contract_active,
        'contratos_finish':contratos_finish,
    }
    return render(request, 'dashboard_servico.html', context)

在我看来,我想对与一份合同相关的所有发票(价值)进行 SUM,以便稍后与 total_to_spent 进行比较,看看它是否通过了价值或不是

【问题讨论】:

    标签: django django-rest-framework django-views django-templates


    【解决方案1】:

    在我看来,我想计算与一份合同相关的所有发票(价值)的总和,以便稍后与 total_to_spent 进行比较,看看它是否通过了价值

    您可以使用以下查询来获取属于特定合同的所有发票的 value 总和,ID 为 contract_id

    Invoice.objects.filter(contract_id=contract_id).values('value').annotate(total=Sum(value))
    

    this link 回答了类似的问题,您可以在其中找到更多详细信息

    【讨论】:

    • 还是不行,报错name 'contrato_id' is not defined
    • 这只是一个示例查询。您当然需要设置 contract_id=
    猜你喜欢
    • 1970-01-01
    • 2021-05-31
    • 2013-03-16
    • 2020-07-02
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 2021-10-30
    相关资源
    最近更新 更多