我正在构建一个必须处理嵌套的多对多字段的序列化程序。我设置了一系列序列化器,但它并没有完全符合我的需要。它创建的JSON看起来像这样:
"course_section": {
"id": 6,
"periods": [
{
"id": 3,
"coursemeet_set": [
{
"id": 4,
"period": 3,
"course_section": 9,
},
{
"id": 8,
"period": 3,
"course_section": 6
},
{
"id": 9,
"period": 3,
"course_section": 6
},
],
"name": "Second Period"
}
}
}
这就是我期望Django REST Framework输出的内容 - 显示所有匹配句点3
的CourseMeets。但是,在上面这个JSON输出的情况下,嵌套集合的course_section的ID为6,因此我只需要在其中包含"course_section": 6
的coursemeets。
我花了一些时间在this question,我能够创建一个几乎完成我想要的自定义ListSerializer:
class FilteredCourseMeetSerializer(serializers.ListSerializer):
def to_representation(self, data):
data = data.filter(period=3, course_section=6)
return super(FilteredCourseMeetSerializer, self).to_representation(data)
class CourseMeetSerializer(serializers.ModelSerializer):
class Meta:
model = CourseMeet
list_serializer_class = FilteredCourseMeetSerializer
class PeriodSerializer(serializers.ModelSerializer):
coursemeet_set = CourseMeetSerializer(many=True)
class Meta:
model = Period
class SectionSerializer(serializers.ModelSerializer):
periods = PeriodSerializer(many=True)
class Meta:
model = CourseSection
但是,正如您所看到的,我手动将period
和course_section
过滤器添加到data.filter
,我需要能够根据SectionSerializer中的id传递这些过滤器以及PeriodSerializer中的ID。
我如何实现这一目标?我是否使用ListSerializer在正确的轨道上,或者有更简单的方法吗?