2016-05-04 9 views
0

私はDjangoとDjango Adminを初めて使用しています。だから、私はまだ物事の正しい名前で100%ではありません。Django管理者のカスタム機能をトリガーする

モデルの管理アプリケーションを使用している場合、リストビューに[すべてダウンロード]ボタン/リンク/アクションを追加します。理想的には、「追加」ボタンと同じです。私はカスタムアクションを試してみましたが、そこにはほとんど私がいましたが、トリガーする前に少なくとも1つの行を選択しなければならないと主張しています。

私は非常に速い結果を提供することに非常に集中しています。ユーザーにアプリの使い方を説明してから、仕事を説明できる限りです。

私はDjango 1.9を使用しています。

+0

ボタンやリンクを追加するには、django admin change_list.htmlを上書きしてapp/templates/appフォルダにコピーしておく必要があります。このリンクはアクションをトリガーするためにurlとcallableを持つ必要があります。このヘルプがほしいと思っています – Amar

答えて

2

STEP1:まず、それはそこchange_list.htmlの

内容は

のようになります。)を作成していない/app/templates/admin/app/change_list.html.(ifであるchange_list.htmlを上書き
{% block object-tools %} 
    {% if has_add_permission %} 
     <ul class="grp-object-tools"> 
      {% block object-tools-items %} 
       <li><a href="export/" class="grp-state-focus"> 
        Export Data 
       </a></li> 
       <li><a href="add/{% if is_popup %}?_popup=1{% endif %}" class="grp-add-link grp-state-focus"> 
        {% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %} 
       </a></li> 
      {% endblock %} 
     </ul> 
    {% endif %} 
{% endblock %} 

STEP2:admin.pyでは、このフォームのget_urlsメソッドを追加

def get_urls(self): 
    urls = super(classname, self).get_urls() # replace wit your class name 
    my_urls = patterns(
     '', 
     url(r'^export/$', 
      ExportCampaignView.as_view(), name='export'), 
    ) 
    return my_urls + urls 

STEP3:ファイルをダウンロードするには、このロジックを追加views.pyで

XLSX_CONTENT_TYPE = ('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') 

class ExportCampaignView(generic.View): 

    def get(self, request, *args, **kwargs): 
     xlsx_file = self.create_xlsx() 
     response = HttpResponse(xlsx_file, content_type=XLSX_CONTENT_TYPE) 
     response['Content-Disposition'] = (
      'attachment; filename=campaign.xlsx') 
     return response 

    @staticmethod 
    def create_xlsx(): 
     """ 
     :return tablib.Dataset: Campaign data. 
     """ 
     output = StringIO() 
     workbook = xlsxwriter.Workbook(output) 
     sheet = workbook.add_worksheet() 
     bold_with_bg = workbook.add_format(
      {'bold': True, 'bg_color': 'silver'}) 
     date_format = workbook.add_format({'num_format': 'dd.mm.YYYY'}) 

     headers = [ 
      _(u'col1'), _(u'col2'), _(u'col3'), 

     ] 


     data = Model.objects.all() 

     for row_idx, row in enumerate(data, start=1): 
      sheet.write(row_idx, 0, row.col1) 
      sheet.write(row_idx, 1, row.col2) 
      sheet.write(row_idx, 1, row.col3) 

     workbook.close() 
     output.seek(0) 
     return output 
+0

グッペリクラス(grp-add-link)を普通のdjango-adminのクラスに変更してください。ロジックはadminクラスにありません。 –

関連する問題