如何使用django-filter中的MethodFilter?
我不知道怎么在django-filter这个应用里使用MethodFilter,而且在文档里也找不到相关信息(http://django-filter.readthedocs.org/en/latest/index.html)。我想为日期字段创建一个过滤器,能够输入开始和结束日期。你知道我该怎么用MethodFilter或者其他方法来实现吗?
我有一个类:
class Product(django_filters.FilterSet):
class Meta:
model = Product
fields = ['name', 'category', 'created_at]
我有一个created_at字段,我想根据created_at来过滤产品(从某个日期到另一个日期)。
4 个回答
0
对于较新版本
created_at = django_filters.DateFromToRangeFilter(widget=django_filters.widgets.RangeWidget(attrs={'type': 'date'}))
0
我不太确定我是否完全理解你的问题,不过如果你想筛选你的产品,可以使用Q。
https://docs.djangoproject.com/en/1.7/topics/db/queries/#complex-lookups-with-q
from django.db.models import Q
queryset = Products.objects.filter(Q(created_at__gte=from)&Q(created_at__ite=to)
0
我在GitHub上搜索了一下,找到了这个。它可以用。
class DateRangeField(django_filters.fields.RangeField):
# Django-Filter DateRangeFilter that really accepts a range of dates ;)
def __init__(self, *args, **kwargs):
fields = (
forms.DateField(),
forms.DateField(),
)
forms.MultiValueField.__init__(self, fields, *args, **kwargs)
class DateRangeFilter(django_filters.RangeFilter):
field_class = DateRangeField
10
为了回答“如何使用 MethodFilter”这个问题,你需要在你的 FilterSet
上定义一个方法,并把这个方法设置为过滤器的 action
。
比如,如果你想根据用户名进行过滤,你可以这样做:
class F(FilterSet):
username = MethodFilter(action='filter_username')
class Meta:
model = User
fields = ['username']
def filter_username(self, queryset, value):
return queryset.filter(
username=value
)