2

export_as_csvエクスポートされた CSV ファイルに動的フィールドを追加できるように、管理メニューに表示されるアクションをカスタマイズしようとしています。これは、 Export as CSVアクションを提供するdjango-adminactionsの使用によるものです。これまでのところ、次のものがあります。

from django.contrib import admin
from adminactions.api import csv_options_default, export_as_csv as _export_as_csv
from myapp.models import MyModel

class MyModelAdmin(admin.ModelAdmin):    
    list_display = ('field1', 'field2', 'field3')

    qs = MyModel.objects.all()
    options = csv_options_default
    fields = ['field4', 'field5']
    header = ['Header4', 'Header5']
    actions = [_export_as_csv(queryset=qs, fields=fields, header=header, options=options)]

admin.site.register(MyModel, MyModelAdmin)

ただし、上記の場合、次のようにページにエラーが発生します。

hasattr(): attribute name must be string
    Request Method: GET
    Request URL:    http://localhost:8000/admin/mymodel/mymodel/
    Django Version: 1.4.14
    Exception Type: TypeError
    Exception Value:    
    hasattr(): attribute name must be string
    Exception Location: /home/me/.virtualenvs/myproj/local/lib/python2.7/site-packages/django/contrib/admin/options.py in get_action, line 648
    Python Executable:  /home/me/.virtualenvs/myproj/bin/python
    Python Version: 2.7.6

私はこれを正しい方法でやっていますか?export_as_csvadmin でDjango の関数に動的フィールドを追加するにはどうすればよいでしょうか?

4

2 に答える 2

0

呼び出しを callable でラップする必要がありますが、アクションでは名前のみを宣言します。

from adminactions.api import export_as_csv as _export_as_csv

def my_export_as_csv(modeladmin, request, queryset):
    return _export_as_csv(modeladmin.qs, 
                          fields=modeladmin.fields, 
                          header=modeladmin.header, 
                          filename=None, 
                          options=modeladmin.options, 
                          out=None)


class MyModelAdmin(admin.ModelAdmin):    
    list_display = ('field1', 'field2', 'field3')

    qs = MyModel.objects.all()
    options = csv_options_default
    fields = ['field4', 'field5']
    header = ['Header4', 'Header5']
    actions = [my_export_as_csv]
于 2014-12-11T16:10:49.247 に答える
0

私はこれをしばらく前に作りました:

https://djangosnippets.org/snippets/2995/

次のように使用できます。

class ExampleModelAdmin(admin.ModelAdmin):
    raw_id_fields = ('field1',)
    list_display = ('field1', 'field2', 'field3',)
    actions = [download_as_csv("Export Special Report"),]  # custom label for action
    download_as_csv_fields = [
        'field1',  # will use Django field verbose_name as col name
        ('foreign_key1__foreign_key2__name', 'label2'),  # traverse relations with __ syntax
        ('field3', 'label3'),  # custom col name
    ],
    download_as_csv_header = True  # output a header row in the csv
于 2014-12-08T21:12:56.890 に答える