Если вы хотите сделать это через сериализаторы, вы можете попробовать переопределить 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)
И затем вы можете создать подкласс, чтобы сделать другие конкретныеListSerializer, такие как:
class IsActiveListSerializer(FilteredListSerializer):
filter_kwargs = {'is_active': 1}
и многие другие ...