首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用django搜索并导出.csv格式的数据

使用django搜索并导出.csv格式的数据
EN

Stack Overflow用户
提问于 2013-06-28 16:24:52
回答 1查看 2.3K关注 0票数 1

我想将搜索结果导出到.csv file.Currently中,我已经编写了一个名为csv_export的函数,并将所有报告导出为.csv.I格式。我想知道如何将搜索到的项导出为.csv文件。

用于搜索的forms.py

代码语言:javascript
复制
class SearchFilterForm(Form):
    location = forms.ChoiceField(widget=forms.Select(), choices='',required=False)
    type = forms.ChoiceField(widget=forms.Select(), choices='',required=False)
    fromdate = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'dd/mm/yyyy','class':'datefield','readonly':'readonly'}))
    todate = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'dd/mm/yyyy','class':'datefield','readonly':'readonly'})) 
    search_keyword = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Keyword Search','class':'keyword-search'}))

用于搜索的views.py

代码语言:javascript
复制
def search(request):
    """Search reports using filters
    """
    user = request.user
    report_list = []
    searchfilter = SearchFilterForm(user) 
    reports = Report.objects.filter(user=user)
    if request.method == 'POST':
       if 'search' in request.POST:
            search_keyword = request.POST.get('search_keyword') #reports filter by keywords
            reports = reports.filter(Q(incident_description__icontains=search_keyword)|Q(incident_number__icontains=search_keyword))
        elif 'filter' in request.POST:
            searchfilter = SearchFilterForm(user,request.POST)
            loc_id = request.POST.get('location')
            type_id = request.POST.get('type')
            start_date = request.POST.get('fromdate')
            end_date = request.POST.get('todate')
            reportlist = []
            """"""""""" #some stuff for search come here
            if start_date or end_date:                 
                if start_date and not end_date:
                    reports = reports.filter(created_date_time__gte=start_date)
                elif not start_date and end_date:
                    reports = reports.filter(created_date_time__lte=end_date)
                elif start_date and end_date:
                    reports = reports.filter(created_date_time__gt=start_date,created_date_time__lt=end_date)
    for report in reports:
      """"""  report iteration goes here
        report_list.append(items)
    return render(request, 'incident/search.html',
                   {'SearchKeywordForm':searchform,})

除了搜索按钮外,在同一搜索页面上还有一个名为save-spreadsheet的按钮,单击搜索按钮会显示搜索到的项目,单击save-spreadsheet按钮会将显示的项目导出到.csv文件中。

需要帮助才能做到这一点。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2013-06-28 17:11:18

检查django documentation about outputting CSV

可以显示搜索结果列表,如下所示:

代码语言:javascript
复制
<ul>
    <li><form method="GET" action="/reports/1/csv/"><input type="submit" value="Get Report 1 csv" /></form></li>
    <li><form method="GET" action="/reports/30/csv/"><input type="submit" value="Get Report 30 csv" /></from></li>
    ...
</ul>

并为给定的报告id创建一个输出CSV的视图:

urls.py

代码语言:javascript
复制
url(r'^reports/(?P<report_id>\d+)/csv/$', 'reports.views.csv_report')

views.py

代码语言:javascript
复制
def csv_report(request, report_id):
    report = Reports.objects.get(pk=report_id)
    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = 'attachment; filename="report.csv"'
    response.write(report.to_csv())  # TODO to_csv
    return response
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17360368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档