检索具有相同外键ID

时间:2017-11-07 05:00:58

标签: django-rest-framework

我想从具有相同外键值的字段中检索所有值,然后我必须添加这些值并将其显示在响应中。

status = models.CharField(
    max_length=50, 
    choices=WALLET_STATUS_CHOICES, 
    default='cash')
merchant = models.ForeignKey(
    merchant_models.Merchant, 
    db_index=True, 
    on_delete=models.CASCADE, 
    related_name='merchant12', 
    null=True,
    blank=True)
cheque_no = models.CharField(
    max_length=100, 
    null=True, 
    blank=True)
cheque_date= models.DateTimeField()
recharge_amount=models.FloatField(null=True, blank=True, default=0.0)

def __unicode__(self):
    return str(self.name)  

我必须获得具有相同商家ID的所有充值值,然后我必须添加这些值并且必须显示。我必须在“商家/身份证”中获得此总和url.is在django中有任何方式吗?

2 个答案:

答案 0 :(得分:0)

假设您的模型名称是EXA,而merchant_id是商家的ID,那么。

merchant_obj = Merchant.objects.get(id=merchant_id)
objects = EXA.objects.filter(merchant=merchant_obj)
total_recharge = 0
for object in objects:
    total_recharge += object.recharge_amount
print total_recharge

或者你可以使用聚合

from django.db.models import Sum

merchant_obj = Merchant.objects.get(id=merchant_id)
total_recharge = EXA.objects.filter(merchant=merchant_obj).aggregate(Sum('recharge_amount'))
print total_recharge

答案 1 :(得分:0)

假设您的型号名称为“交易”。 如果您可以在逻辑中的某个位置访问商家对象:

qs = Transaction.objects.filter(merchant=merchant)

或者,如果您知道merchant_id的外键ID:

qs = Transaction.objects.filter(merchant_id=merchant_id)

然后你可以在Django中使用aggregate and Sum函数:

from django.db.models import Sum
qs.aggregate(Sum('recharge_amount'))

或者全部排成一行:

from django.db.models import Sum

total_recharge = Transaction.objects.filter(
    merchant_id=merchant_id
).aggregate(
    Sum('recharge_amount'))