django - Django 休息框架:如何过滤范围内的查询集?
问题描述
我需要从范围内的获取请求中过滤数据:
这是我的代码:
模型.py
class MainModel(TimeStampedModel):
model_name = models.CharField(_("model_name"), max_length=240)
model_price = models.DecimalField(_("model_price"), max_digits=8)
class ModelAdditionalData_1(TimeStampedModel):
model_id = models.OneToOneField(
Model,
verbose_name=_('related model'),
on_delete=models.CASCADE,
related_name='model_water_flow_data1',
related_query_name='model_water_flow_data1'
)
model_param_1 = models.models.DecimalField(_("model_param_1"), max_digits=8)
class ModelAdditionalData_2(TimeStampedModel):
model_id = models.OneToOneField(
Model,
verbose_name=_('related model'),
on_delete=models.CASCADE,
related_name='model_water_flow_data2',
related_query_name='model_water_flow_data2'
)
model_param_2 = models.models.DecimalField(_("model_param_2"), max_digits=8)
视图.py:
class ModelsViewSet(ReadOnlyModelViewSet, GenericViewSet):
serializer_class = ModelsSerializer
def get_queryset(self):
model_param_1 = self.request.query_params.get('model_param_1')
model_param_2 = self.request.query_params.get('model_param_2')
filters = {}
if model_param_1:
filters['model_water_flow_data1__model_param_1'] = model_param_1
if model_param_2:
filters['model_water_flow_data2__model_param_2'] = model_param_2
if filters:
return MainModel.objects.filter(**filters)
return MainModel.objects.all()
我如何应用我的过滤器来过滤范围内的数据?例如,我不会按 model_param_1 在 1 和 10 之间过滤数据。
解决方案
过滤器可以像这样构建以覆盖一个范围:
filters = {}
if model_param_1:
filters['model_water_flow_data1__model_param_1__gte'] = 1
filters['model_water_flow_data1__model_param_1__lte'] = 10
if model_param_2:
filters['model_water_flow_data1__model_param_2__gte'] = 1
filters['model_water_flow_data1__model_param_2__lte'] = 10
MainModel.objects.filter(**filters)
推荐阅读
- php - PHP upload image through AJAX issue
- javascript - How to subtract month from YYYYMMDD hh mm date format in Angular?
- python - 简单的 Python 交易系统示例:填充 pandas 数据框并导出到 excel
- objective-c - With ARC , why the dealloc not called
- python - TENSORFLOW Can't find a solution for: ValueError: logits and labels must have the same shape ((None, 1) vs (None, 2, 2))
- amazon-s3 - Facing "IllegalLocationConstraintException" error
- python - trying to merge two list ,placing their item alternative to each other in pyhton
- javascript - React 钩子形式 setValue 返回未定义的多选(react-select)
- laravel - 如何在 Vue 组件的 URL 中传递或获取 UserId 和 QuizId?拉拉维尔 7
- node.js - Vue Electron 在异步调用一些 Node 库时卡住了