假设我有一个过滤器组:
class AnimalFilter(filters.FilterSet): animal_family = filters.CharFilter(required=True) is_land_animal = filters.BooleanFilter(required=True)
但是如果我只想为其中一个设置required=True,比如如果有人传入animal_family,我不需要接收is_land_animal,反之亦然。
required=True
animal_family
is_land_animal
ddrv8njm1#
如果你想设置required=True,那么你必须在get方法中使用qurey_params来获取你想显示的属性。
def list(self, request, *args, **kwargs): user = self.request.user company = user.branch.company branch = user.branch assetID = self.request.query_params.get('assetID', None) if assetID is not None: asset_query = Assets.objects.filter(company=company, branch=branch, id=assetID) if asset_query.exists(): asset_detail = YourModel.values('id', 'name', 'asset_id', 'purchase_date').\ annotate(asset_category_name=F('asset_category__category_name'), asset_user_first_name=F('asset_user__first_name'), asset_user_last_name=F('asset_user__last_name')) return Response({'asset_details': asset_detail, 'history': history}, status=status.HTTP_200_OK) else: return Response({'message': 'This AssetID does not exist'}, status=status.HTTP_400_BAD_REQUEST) else: return Response({'message': 'AssetID is required'}, status=status.HTTP_400_BAD_REQUEST))
API端点将如下发送http://127.0.0.1:8000/apiName/?assetID=True你必须记住我从端点接收到什么如果它是一个数字,那么发送数字如果它是布尔值,那么发送TRUE或FALSE如果它是任何字符串,那么发送string,
xoshrz7s2#
你可能不得不使用一些未记录的东西(?),如果你看一下source of django-filters,你会发现在__init__中它把你的视图请求绑定到self.request。因此,您可以使用method=编写这些过滤器,并提供方法代码,以便在调用self.request.GET时查看是否提供了“其他”过滤器,如果是,则不修改查询集。两个过滤器required=False。如果你决定不提供任何一个,你需要检查某个地方(在你的视图的get方法中?),一个或另一个在request.GET中,并引发异常或重定向到一个错误视图。在等待四分之一TB的数据复制时,我脑子里全是这些。
__init__
method=
self.request.GET
required=False
get
request.GET
2条答案
按热度按时间ddrv8njm1#
如果你想设置
required=True
,那么你必须在get方法中使用qurey_params来获取你想显示的属性。API端点将如下发送
http://127.0.0.1:8000/apiName/?assetID=True
你必须记住我从端点接收到什么如果它是一个数字,那么发送数字如果它是布尔值,那么发送TRUE或FALSE如果它是任何字符串,那么发送string,
xoshrz7s2#
你可能不得不使用一些未记录的东西(?),如果你看一下source of django-filters,你会发现在
__init__
中它把你的视图请求绑定到self.request。因此,您可以使用
method=
编写这些过滤器,并提供方法代码,以便在调用self.request.GET
时查看是否提供了“其他”过滤器,如果是,则不修改查询集。两个过滤器
required=False
。如果你决定不提供任何一个,你需要检查某个地方(在你的视图的get
方法中?),一个或另一个在request.GET
中,并引发异常或重定向到一个错误视图。在等待四分之一TB的数据复制时,我脑子里全是这些。