我有两个这样的模型:
class Budget(models.Model):
name = models.CharField(max_length=255)
class Transaction(models.Model):
type = models.CharField(
max_length=3,
choices=[('inc', 'Income'), ('exp', 'Expense')],
default='inc'
)
amount = models.DecimalField(max_digits=12, decimal_places=2)
description = models.TextField()
added_by = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
date = models.DateTimeField()
objects = TransactionQuerySet.as_manager()
budget = models.ForeignKey(Budget, on_delete=models.CASCADE)
…我的TransactionQuerySet上有一个自定义管理器方法:
class TransactionQuerySet(models.QuerySet):
def categorize_budgets(self):
return self.model.objects.values_list('budget').annotate(total=Sum('amount'))
我想按预算对费用进行分类并汇总,当我这样做时:
>>> Transaction.objects.filter(added_by=user, type='exp').categorize_budgets()
<TransactionQuerySet [(1, Decimal('4'))]>
它返回的是,我想是预算id)。我想让它返回预算名称而不是,这是可能的?我有这样的解决方法,但我想知道DB是否可以一次性完成所有工作:
def get_expenses(self):
expenses = Transaction.objects.filter(
added_by=self.request.user, type='exp'
).categorize_budgets()
mappings = {
Budget.objects.get(id=k).name: v for k, v in expenses
}
您可以使用常用的Django相关查找,即
budget__name
:相关问题 更多 >
编程相关推荐