过滤 Django 序列化器数据
filter django serializer data
很多时候我们根据 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__'
这里我只想设置一个过滤器来只获取那些数据库字段为 is_active=1 的作业,就像这样 DaasJobsSerializer(read_only=True,many=是的,filter={"is_active":1}) 如何做这样的事情??
目前它在不检查 is_active 的情况下向我提供所有数据,
而且我不想为此创建 serializerMethodField .. 因为所有方法都写在前面.. 我只是稍后在 db.
的表中设置一个 is_active 字段
如果你想通过序列化程序来完成,你可以尝试覆盖 ListSerializer
并将其作为自定义 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)
然后您可以将其子class 以制作其他特定的 ListSerializer,例如:
class IsActiveListSerializer(FilteredListSerializer):
filter_kwargs = {'is_active': 1}
和许多其他人...
很多时候我们根据 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__'
这里我只想设置一个过滤器来只获取那些数据库字段为 is_active=1 的作业,就像这样 DaasJobsSerializer(read_only=True,many=是的,filter={"is_active":1}) 如何做这样的事情??
目前它在不检查 is_active 的情况下向我提供所有数据, 而且我不想为此创建 serializerMethodField .. 因为所有方法都写在前面.. 我只是稍后在 db.
的表中设置一个 is_active 字段如果你想通过序列化程序来完成,你可以尝试覆盖 ListSerializer
并将其作为自定义 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)
然后您可以将其子class 以制作其他特定的 ListSerializer,例如:
class IsActiveListSerializer(FilteredListSerializer):
filter_kwargs = {'is_active': 1}
和许多其他人...