django - 过滤 django 序列化程序数据
问题描述
很多时候,我们根据 Django(1.11.10) 中模型中定义的关系通过序列化程序目录访问数据。我如何设置一个过滤器,比如 fetch-only is_active=1。
class DaasJobsSerializer(serializers.ModelSerializer):
class Meta:
model = DaasJobs
fields = '__all__'
class DaasScheduleSerializer(serializers.ModelSerializer):
jobs = DaasJobsSerializer(read_only=True,many=True)
class Meta:
model = DaasSchedule
fields = '__all__'
在这里,我只想设置一个过滤器以仅获取该行中 db 字段 is_active=1 的那些作业,例如DaasJobsSerializer(read_only=True,many=True, filter={"is_active":1}) 如何做这样的事情??
目前它在没有检查 is_active 的情况下给了我所有数据,我不想为此创建 serializerMethodField .. 因为之前编写的所有方法.. 我只是稍后在 db 的表中设置一个 is_active 字段。
解决方案
如果您想通过序列化程序来实现,您可以尝试覆盖ListSerializer
并将其作为 custom 传递list_serializer_class
。
class IsActiveListSerializer(serializers.ListSerializer):
def to_representation(self, data):
data = data.filter(is_active=1)
return super().to_representation(data)
在您的序列化程序中:
class DaasJobsSerializer(serializers.ModelSerializer):
class Meta:
model = DaasJobs
fields = '__all__'
list_serializer_class = IsActiveListSerializer # import it here
当然,这是一个特定的用例,您可以制作更通用的 ListSerializer 版本来:
class FilteredListSerializer(serializers.ListSerializer):
filter_kwargs = {}
def to_representation(self, data):
if not self.filter_kwargs or not isinstance(self.filter_kwargs, dict):
raise TypeError(_('Invalid Attribute Type: `filter_kwargs` must be a of type `dict`.'))
data = data.filter(**self.filter_kwargs)
return super().to_representation(data)
然后您可以对其进行子类化以制作其他特定的 ListSerializer,例如:
class IsActiveListSerializer(FilteredListSerializer):
filter_kwargs = {'is_active': 1}
和许多其他人......
推荐阅读
- gssapi - KAFKA python gssapi.raw.creds
- python - 如何将具有不同列中多组数据的行拆分为多行
- pyspark - 重命名 Pyspark Dataframe 中的未命名列
- python - 如何在 django 中显示最新的 3 个项目
- r - 处理没有 AM/PM 的 Timeseries 数据集并在 R 中转换为 24 小时格式
- reactjs - React TS:使用自定义钩子的测试组件
- javascript - 禁用网页上的键盘快捷键
- php - get_custom_logo 和 get_bloginfo 不起作用
- javascript - Filter Array - 如果数组存在于对象数组中
- javascript - 在 jquery datapicker 重置为当前日期之前捕获手动输入的日期,同时使用 Maxdate 进行限制