MNUにてインターンをさせていただいています、
豊橋技術科学大学の近藤です。
DjangoのAdminサイトをカスタマイズしていたので、内容をまとめてみました。
・ BooleanFieldならBooleanFieldListFilter
・ ForienKeyならRelatedFieldListFilter
・ ChoicesならChoicesFieldListFilter
・ DateFieldならDateFieldListFilter
が呼び出され、当てはまらなかったら
・ Fieldのすべての値を出したListでフィルターするAllValuesFieldListFilter
が呼び出される
指定して設定する際は、
DjangoのAdminサイトをカスタマイズしていたので、内容をまとめてみました。
アクションの追加
FileFieldを使ってファイルを管理していたので、ファイルを削除できるアクションを追加してみました。from django.contrib import admin
from .models import Hoge
def file_delete(modeladmin, request, queryset):
for query in queryset:
query.file_delete() # modelsに記述した除去メソッド
file_delete.short_description = u'ドロップダウンに表示するアクション名'
class HogeAdmin(admin.ModelAdmin):
actions = [
file_delete
]
admin.site.register(Hoge, HogeAdmin)
フィルターの追加
アクション追加のついでにファイルがあるかでフィルターできるように。call FileListFilter(admin.SimpleListFilter):
title = u'フィルター名'
parameter_name = 'file' # urlのパラメタ
def lookups(self, request, modeladmin):
return (
('true', u'あり'),
('false', u'なし'),
)
def queryset(self, request, queryset):
if self.value() == 'true':
return queryset.exclude(file__exact='')
elif self.value() == 'false':
return queryset.filter(file__exact='')
class HogeAdmin(admin.ModelAdmin):
list_filter = (FileListFilter)
actions = [
file_delete
]
モデルにあるフィールドを用いてフィルターする際はそのまま、list_filter = ('is_hoge',)
とする。 内部では、・ BooleanFieldならBooleanFieldListFilter
・ ForienKeyならRelatedFieldListFilter
・ ChoicesならChoicesFieldListFilter
・ DateFieldならDateFieldListFilter
が呼び出され、当てはまらなかったら
・ Fieldのすべての値を出したListでフィルターするAllValuesFieldListFilter
が呼び出される
指定して設定する際は、
list_filter = (('is_hoge', admin.BooleanFieldListFilter),)
とする。
コメント
コメントを投稿