Python 使用值和注释时获取外键字段

Python 使用值和注释时获取外键字段,python,django,Python,Django,我有这个模型: class Donation(models.Model): amount = models.IntegerField() receipt = models.CharField(max_length=40, blank=True) donation_date = models.DateTimeField() donator = models.ForeignKey(User, related_name='donation_donator', blank

我有这个模型:

class Donation(models.Model):
    amount = models.IntegerField()
    receipt = models.CharField(max_length=40, blank=True)
    donation_date = models.DateTimeField()
    donator = models.ForeignKey(User, related_name='donation_donator', blank=True, null=True, on_delete=models.SET_NULL)
    validation_date = models.DateTimeField(blank=True, null=True)
然后这个观点:

def report(request, month=None):
    datafilter = Q()
    datafilter = datafilter & Q(donation_date__month=month)

    top_donors_month = Donation.objects.values('donator').annotate(Sum('amount')).order_by('-amount__sum').filter(datafilter)
    top_donors_all = Donation.objects.values('donator').annotate(Sum('amount')).order_by('-amount__sum')
基本上,它返回一个捐赠者-总金额-捐赠关系的列表。但查询返回的dict如下所示:

[{'donator' : 3, 'amount_sum' : 5200}, {'donator' : 2, 'amount_sum' : 1200}, {.....}]
其中3,2,1。。等是捐赠者pks。如何访问3的名称

e、 g


而不是捐赠者,你必须得到捐赠者名字的值

尝试如下:

top_donors_month = Donation.objects.values('donator__first_name').annotate(Sum('amount')).order_by('-amount__sum').filter(datafilter)
top_donors_all = Donation.objects.values('donator__first_name').annotate(Sum('amount')).order_by('-amount__sum')

你的意思是
.values('donator\uu first\u name')
?是的。该死,我又粗心了。我一直在试捐赠者的名字。其中,由于模型没有该字段。非常感谢。该死,我又粗心了。我一直在试捐赠者的名字。其中,由于模型没有该字段。非常感谢。
top_donors_month = Donation.objects.values('donator__first_name').annotate(Sum('amount')).order_by('-amount__sum').filter(datafilter)
top_donors_all = Donation.objects.values('donator__first_name').annotate(Sum('amount')).order_by('-amount__sum')