【发布时间】:2021-10-19 18:25:35
【问题描述】:
我有一个可以工作的嵌套序列化程序,但我想排除嵌套序列化程序为空的实例。我在嵌套序列化程序上使用的过滤有效,但目前此代码返回所有站点,其中大多数在应用过滤器时具有空的 site_observations 数组。我只想返回包含 site_observations 的站点。我已经为 site_observations 尝试了 SerializerMethodField 但有同样的问题。使用 DRF 3.12
相关模型是站点,以及对站点有 FK 的观察,related field=site_observations
序列化器.py
class FilteredObsListSerializer(serializers.ListSerializer):
def to_representation(self, data):
projName = self.context["projName"]
# this is my filter which works
data = filter_site_observations(data, self.context["request"],
projName)
return super(FilteredObsListSerializer, self).to_representation(data)
class ObsFilterSerializer(serializers.ModelSerializer):
class Meta:
list_serializer_class = FilteredObsListSerializer
model = Observation
fields = "__all__"
class SiteSerializer(GeoFeatureModelSerializer):
site_observations = ObsFilterSerializer(many=True)
class Meta:
model = Site
geo_field = "geometry"
fields = ("id", "name", "geometry", "site_observations")
views.py
class SiteList(generics.ListAPIView):
queryset = Site.objects.all().order_by("pk")
serializer_class = SiteSerializer
# this is for filtering Observations on segment of an url:
def get_serializer_context(self):
context = super(SiteList, self).get_serializer_context()
context.update({"projName": self.kwargs["name"]})
return context
如何排除 site_observations 为空列表的站点?谢谢。
【问题讨论】:
标签: python django django-rest-framework django-queryset django-serializer