Django rest framework:如何过滤范围内的查询集?
Django rest framework : how can I filter queryset in range?
我需要从 get 请求中过滤范围内的数据:
这是我的代码:
model.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)
view.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()
我如何应用过滤器来过滤范围内的数据?例如,我不会按 1 和 10 之间的 model_param_1 过滤数据。
可以像这样构建过滤器以覆盖范围:
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)
我需要从 get 请求中过滤范围内的数据:
这是我的代码:
model.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)
view.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()
我如何应用过滤器来过滤范围内的数据?例如,我不会按 1 和 10 之间的 model_param_1 过滤数据。
可以像这样构建过滤器以覆盖范围:
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)