【发布时间】:2021-08-28 06:08:08
【问题描述】:
我正在尝试注释相关集中的字段总和:
我的模型:
class Report(models.Model):
class ReportCommissionPosition(models.Model):
report = models.ForeignKey(Report)
reservation = models.OneToOneField("reservations.Reservation")
class Reservation(models.Model):
class Payment(models.Model):
amount = models.DecimalField(max_digits=10, decimal_places=2)
reservation = models.ForeignKey('reservations.Reservation')
PAYMENT_TYPES=(
('TRANS', 'TRANS'),
('SELL', 'SELL'),
payment_accounting_type = models.CharField(max_length=50, choices=PAYMENT_TYPES)
我需要用两个字段注释report.reportcommissionposition_set的每个位置:
trans_amount - 付款会计类型 == 'SELL' 的所有付款的总和(通过预订 => 付款) sum_amount - 付款会计类型 == 'TRANSFER' 的所有付款的总和(通过预订 => 付款)
我试过了:
for position in commission_position:
position.sell_pay = position.reservation.payment_set.filter(payment_accounting_type='SELL').aggregate(amount=Sum('amount'))['amount']
但这会为每个元素创建新的查询。
有什么想法吗?
【问题讨论】:
标签: django django-models django-annotate