【问题标题】:Django rest filters aggregationDjango 休息过滤器聚合
【发布时间】:2020-09-11 06:58:32
【问题描述】:

这是我的自定义过滤器类

class CarFilter(FilterSet):
    pickup_date = NumberFilter(method='filter_pickup_date_timestamp')
    dropoff_date = NumberFilter(method='filter_dropoff_date_timestamp')

class Meta:
    model = Car
    fields = ['area_coverage', 'is_published', 'owner']

def filter_pickup_date_timestamp(self, queryset, name, value):
    pickup_date = datetime.fromtimestamp(float(value))
    for car in queryset:
        if len(Reservation.objects.filter(
            dropoff_date__gte=pickup_date,
            is_active=True,
            item_type='car',
            item=car.item,
        )) > 0:
            return None
    return queryset.filter()

def filter_dropoff_date_timestamp(self, queryset, name, value):
    dropoff_date = datetime.fromtimestamp(float(value))
    for car in queryset:
        if len(Reservation.objects.filter(
            pickup_date__lte=dropoff_date,
            is_active=True,
            item_type='car',
            item=car.item,
        )) > 0:
            return None
    return queryset.filter()

是否可以创建这样的方法,它将同时通过 pickup_datedropoff_date 两个参数进行过滤?如何从方法中归档的另一个过滤器中获取value?因为知道我必须通过Reservation 模型过滤两次。

【问题讨论】:

    标签: django django-rest-framework django-filter django-filters


    【解决方案1】:

    这是可能的。你只需要这样做:

    Reservation.objects.filter(LOGIC_FOR_FIRST_FILTERING_HERE).filter(LOGIC_FOR_SECOND_FILTERING_HERE)  
    

    【讨论】:

    • 你没有理解这个问题。如何从方法中的不同字段获取value
    【解决方案2】:

    可以,因为在方法中可以通过self访问请求

    def filter_pickup_date_timestamp(self, queryset, name, value):
        pickup_date = value
        dropoff_date = self.request.query_params.get('dropoff_date')
    

    【讨论】:

      猜你喜欢
      • 2017-03-09
      • 1970-01-01
      • 2018-06-16
      • 2018-04-18
      • 1970-01-01
      • 2017-11-13
      • 2012-07-24
      • 2019-05-05
      • 2011-08-19
      相关资源
      最近更新 更多