Django 休息过滤器聚合
Django rest filters aggregation
这是我的自定义过滤器 class
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_date
和 dropoff_date
进行过滤?如何从方法中提交的另一个过滤器中获取 value
?因为知道我必须通过 Reservation
模型过滤两次。
有可能。你只需要这样做:
Reservation.objects.filter(LOGIC_FOR_FIRST_FILTERING_HERE).filter(LOGIC_FOR_SECOND_FILTERING_HERE)
有可能,因为in method request可以通过self
访问
def filter_pickup_date_timestamp(self, queryset, name, value):
pickup_date = value
dropoff_date = self.request.query_params.get('dropoff_date')
这是我的自定义过滤器 class
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_date
和 dropoff_date
进行过滤?如何从方法中提交的另一个过滤器中获取 value
?因为知道我必须通过 Reservation
模型过滤两次。
有可能。你只需要这样做:
Reservation.objects.filter(LOGIC_FOR_FIRST_FILTERING_HERE).filter(LOGIC_FOR_SECOND_FILTERING_HERE)
有可能,因为in method request可以通过self
def filter_pickup_date_timestamp(self, queryset, name, value):
pickup_date = value
dropoff_date = self.request.query_params.get('dropoff_date')