如何解决如何将下拉列表中的过滤器传递到 django-import-export 视图 方法一方法二
我了解如何通过具有 return render(request,'htmlname.html,{})
的视图传递过滤器。
对于这种通过 django-import-export 导出选项导出数据的情况,我不知道该怎么做。我想从要下载的数据的下拉选择中传递一个过滤器。
我的看法
def ExportStudentsView(request):
dataset = ExportStudentsResource().export(school = request.user.school,klass = ?????????)
response = HttpResponse(dataset.xls,content_type='application/vnd.ms-excel')
response['Content-disposition'] = 'attachment; filename="All students.xls"'
return response
我的资源
class ExportStudentsResource(resources.ModelResource):
def export(self,queryset = None,*args,**kwargs):#this method helps capture the current user school
queryset = Students.objects.filter(school = kwargs['school'],klass = kwargs['klass'])
return super(ExportStudentsResource,self).export(queryset,**kwargs)
klass__name = fields.Field(attribute = 'klass__name',column_name='class')#Changes column name from school__name to school
stream__name = fields.Field(attribute = 'stream__name',column_name='stream')
gender__name = fields.Field(attribute = 'gender__name',column_name='gender')
class Meta:
model = Students
fields = ('adm','name','kcpe','klass__name','stream__name','gender__name','notes')
export_id_fields = ('adm',)
export_order = ('adm','notes')
解决方法
您可以采取几种方法。您选择的方法可能取决于这是“一次性的”还是您需要一个可重用的类。我可能更喜欢“方法 2”。
方法一
您可以在视图中过滤查询集,然后将其传递给导出:
def export_students(request):
queryset = Students.objects.filter(school = kwargs['school'],klass = kwargs['klass'])
# notice that the first arg to the Resource is a Queryset
dataset = ExportStudentsResource().export(queryset)
方法二
覆盖资源上的 get_queryset()
方法。您可以在实例化时设置 args 并将它们应用于查询:
class ExportStudentsResource(resources.ModelResource):
def __init__(self,**kwargs):
self.school = kwargs['school']
self.klass = kwargs['klass']
def get_queryset(self):
return Students.objects.filter(school=self.school,klass=self.klass)
如果您查看 export()
的源代码,它应该会更清楚地说明发生了什么,以及它们如何组合在一起。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。