如何将 Count 字段传递给导出字段

问题描述

我正在处理导出资源,但我不知道如何从视图中将该字段作为导出中的列传递。

issues = Student.objects.annotate(Count('issue'))

def view_student(request):  
    issues = Student.objects.annotate(Count('issue'))
    students = Student.objects.filter(school = request.user.school).order_by('year')
    return render(request,'view_student.html',{'students': students,'issues':issues})

这是我在 resoucrces.py 中尝试的方法,但没有显示结果

class ExportStudentsResource(resources.ModelResource):
    books = fields.Field(attribute = 'books',column_name='books',widget= ForeignKeyWidget(Student,'issue_count'))
  
    class Meta:
        model = Student
        fields = ('student_id','name','year','klass','stream','books')

这个字段不是来自任何模型,所以我只是认为学生模型可能包含它。我怎样才能让它工作

解决方法

您可以覆盖 .get_queryset(…) method [Django-doc] 并使用以下内容注释您的 Student 对象:

from django.db.models import Count

class ExportStudentsResource(resources.ModelResource):
    books = fields.Field(
        attribute='books',column_name='books',widget= ForeignKeyWidget(Student,'issue_count')
    )
    issues_count = fields.Field(attribute='issue_count')

    def get_queryset(self):
        return super().get_queryset().annotate(
            issue_count=Count('issue')
        )
  
    class Meta:
        model = Student
        fields = ('student_id','name','year','klass','stream','books')