【问题标题】:Django admin changelist view titleDjango 管理员更改列表视图标题
【发布时间】:2021-04-30 03:00:18
【问题描述】:

如何传递过滤器值来更改列表视图标题?我有报告的管理页面,我想在标题中存储日期,所以它看起来像这样:“2021 年 1 月 24 日的报告摘要” 我想从列表过滤器中获取日期报告__report_date

class AdminReportsProxy(admin.ModelAdmin):
    """Admin model, that creats site of reports summary"""

    model = ReportsProxy
    actions = None
    search_fields = [
        "first_name",
        "last_name",
    ]
    list_display = [
        "get_salesman",
        "get_number_of_meetings_today",
        "get_number_of_meetings_tomorrow",
        "get_number_of_sales",
        "get_number_of_recommandations",
        "get_net_sales",
        "get_report_date",
        "edit_report",
    ]
    list_filter = [
        ("reports__report_date", DateRangeFilter),
        NetSalesOrder,
    ]

    def changelist_view(self, request, extra_context=None):
        extra_context = {'title': f'Reports summary for day:{}'}
        return super(AdminReportsProxy, self).changelist_view(request, extra_context=extra_context)

【问题讨论】:

    标签: django filter view django-admin


    【解决方案1】:

    在重写函数changelist_view 中,只需访问已由 DateRangeFilter 小部件传递的查询参数,它们应该如下所示

    your_filtered_field__gte -> 起始日期

    your_filtered_field__lte -> 迄今为止

    如下:

        def changelist_view(self, request, extra_context=None):
            date_from = request.GET.get("reports__report_date__gte", None)
            date_to = request.GET.get("reports__report_date__lte", None)
            if date_from and date_to:
                # If these two values are available, you can replace the title of the page.
                extra_context = {
                    "title": f"Report Summary between {date_from} - {date_to}"
                }
            return super().changelist_view(request, extra_context)
    

    【讨论】: