如何从django-filter应用程序中使用MethodFilter?

w8rqjzmb  于 2023-06-25  发布在  Go
关注(0)|答案(4)|浏览(108)

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

hpxqektj

hpxqektj1#

要回答问题的 * 如何使用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
        )
6ju8rftf

6ju8rftf2#

我不确定我完全理解你的要求,但是要过滤你的产品你可以用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)
b0zn9rqh

b0zn9rqh3#

我在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
mzsu5hc0

mzsu5hc04#

对于较新版本

created_at = django_filters.DateFromToRangeFilter(widget=django_filters.widgets.RangeWidget(attrs={'type': 'date'}))

相关问题