python - 如何将过滤器从下拉列表传递到 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, *args, **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','name','kcpe','klass__name','stream__name','gender__name','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()
它的来源,应该可以更清楚地了解发生了什么,以及它们是如何结合在一起的。
推荐阅读
- html - 如何在我的管理网站上获取我的配置 API 以在我的登录页面中使用?
- r - 根据日期时间和事件创建序列列以获取订单
- web-component - 扩展的 HTML 元素:“是”,包裹一个 HTML 元素,或其他任何东西 - 当前状态是什么?
- google-bigquery - 使用 OVER PARTITION BigQuery 在给定时间之前获取最新记录
- onedrive - 将文件从本地共享复制到共享一个驱动器文件夹
- javascript - 在命名空间存储中调度操作 (Vuex/Nuxt)
- c - C:scanf() 挂起,getchar() 无法清除输入
- json - 如何在 Swift 中映射这个 JSON?
- java - Spring Data JPA 将存储过程结果从多个数据源映射到非实体 POJO
- r - 在本地采购 Rcpp 可以工作,但不能并行化