管理画面にてカレンダーでの区間指定

20 views
Skip to first unread message

Jun Tanaka

unread,
Feb 22, 2019, 2:49:40 AM2/22/19
to django-ja

田中と申します。


djangoの管理画面でのtimestampにてわからないことがありまして質問させていただきます。


下記のような Django のモジュール知っている方いらしたらご紹介いただけないでしょうか


1 管理画面でtimestampの日付の範囲でデータを CSV に吐き出しをしたい。

2 管理画面のUIにカレンダーが出てきて区間を指定できるような方法が望ましいです。

上記を解決するモジュールありませんでしょうか 。

ご存知でしたら教えていただけると幸いです 。


宜しくお願い致します。


Jun Tanaka

unread,
Feb 22, 2019, 3:28:29 AM2/22/19
to django-ja
例えば、管理画面のカレンダー上にて、1月1日から1月4日までのデータを選択したらその間のデータが全部一括で CSV で取れるようなイメージです 。

2019年2月22日金曜日 16時49分40秒 UTC+9 Jun Tanaka:

筒井 隆次

unread,
Feb 24, 2019, 8:13:24 AM2/24/19
to djan...@googlegroups.com
筒井です。
「2」についてはdjango-admin-rangefilterというサードパーティライブラリでできます。

「1」については私が知る限り該当するライブラリはありませんが、以下公式ドキュメントを参考にして自分で実装するのはそんなに難しくないと思います。

ModelAdminの「actions」というフィールドに上記関数を設定することで、管理画面にカスタムアクションを追加することができます。

例として、Bookというモデルを対象にして以下のadmin.pyを作ってみました。Django2.1.7を使っていますが、古いバージョンでも動くはずです。

import csv

from django.contrib import admin
from django.http.response import HttpResponse
from rangefilter.filter import DateRangeFilter

from .models import Book


def export_as_csv(modeladmin, request, queryset):
    meta = modeladmin.model._meta
    field_names = [field.name for field in meta.fields]

    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = f'attachment; filename={meta.label_lower}.csv'
    writer = csv.writer(response)

    writer.writerow(field_names)
    for obj in queryset:
        writer.writerow([getattr(obj, field) for field in field_names])
    return response


export_as_csv.short_description = "CSVエクスポート"


class BookAdmin(admin.ModelAdmin):
    list_filter = (
        ('published_at', DateRangeFilter),
    )
    actions = (export_as_csv,)


admin.site.register(Book, BookAdmin)



2019/02/22 16:49、Jun Tanaka <tna...@gmail.com>のメール:

--
----------------- http://djangoproject.jp/ -----------------
You received this message because you are subscribed to the Google Groups "django-ja" group.
To post to this group, send email to djan...@googlegroups.com
To unsubscribe from this group, send email to django-ja-...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/django-ja
---
このメールは Google グループのグループ「django-ja」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには django-ja+...@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

Reply all
Reply to author
Forward
0 new messages