wagtail中list_filter过滤器中的日期字段如何改为可以选择年月的
时间: 2024-03-06 10:49:54 浏览: 97
默认情况下,wagtail中的list_filter过滤器中的日期字段只能按照年月日进行筛选。如果你想要将其改为可以选择年月的方式进行筛选,可以按照以下步骤进行操作:
1. 创建一个自定义的过滤器类,继承自`wagtail.contrib.modeladmin.filters.DateRangePickerWidget`类,并重写`render_template`方法,指定自定义的模板文件。
```python
from django.template.loader import render_to_string
from wagtail.contrib.modeladmin.filters import DateRangePickerWidget
class YearMonthPickerWidget(DateRangePickerWidget):
def render_template(self, name, value, attrs=None, renderer=None):
template_name = 'admin/year_month_picker.html'
context = {'widget': self, 'name': name, 'value': value, 'attrs': attrs}
return render_to_string(template_name, context)
```
2. 创建一个自定义的模板文件`year_month_picker.html`,其中包含一个`select`标签,用于选择年月。
```html
{% load wagtailcore_tags %}
{% load wagtailadmin_tags %}
{% include "wagtailadmin/widgets/date_range_picker.html" %}
{% block extra_widget %}
<div class="field-inner">
<label for="{{ widget.attrs.id }}_year_month">Year Month:</label>
<select id="{{ widget.attrs.id }}_year_month" name="{{ widget.attrs.name }}_year_month">
{% for year in widget.years %}
{% for month in widget.months %}
<option value="{{ year }}-{{ month }}" {% if year == widget.year and month == widget.month %}selected{% endif %}>
{{ month_name|get_item:month }} {{ year }}
</option>
{% endfor %}
{% endfor %}
</select>
</div>
{% endblock %}
```
3. 在list_filter中使用自定义的过滤器类。
```python
from django.contrib import admin
from myapp.models import MyModel
from myapp.filters import YearMonthPickerWidget
class MyModelAdmin(admin.ModelAdmin):
list_filter = (
('created_at', YearMonthPickerWidget),
)
admin.site.register(MyModel, MyModelAdmin)
```
这样,就可以在wagtail的后台管理界面中,使用自定义的过滤器类对日期字段进行按年月的筛选了。
阅读全文