我不知道如何在django-filter app中使用MethodFilter,我在文档中找不到它(http://django-filter.readthedocs.org/en/latest/index.html)。我需要创建过滤器,使用from和to输入日期字段。您是否知道如何使用MethodFilter或其他方式执行此操作?
我有一些课程:
class Product(django_filters.FilterSet):
class Meta:
model = Product
fields = ['name', 'category', 'created_at]
我有字段created_at,我想按created_at过滤产品(从和到)。
答案 0 :(得分:9)
要回答如何使用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
)
答案 1 :(得分: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)
答案 2 :(得分: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