如何使用django-filter app中的MethodFilter?

时间:2014-10-30 14:49:39

标签: python django django-filters

我不知道如何在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过滤产品(从和到)。

3 个答案:

答案 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