我有一个类似于下面的序列化模型:
{
name: "...."
section: [
{
section_name: "..."
group:[
{"group_name": "..."}
]
},
]
}
有什么方法可以在Django Rest Framework下提取group_name,以便:
{
name: "...."
section: [
{ section_name: "..."},
]
group_name:[
{ group_name: "..." }
]
}
我之所以这样做,是因为我可以使用django过滤器来过滤group_name。
出于某种原因,我似乎无法使相关过滤器在django rest框架过滤器(第三方软件包:https://github.com/philipn/django-rest-framework-filters/blob/master/rest_framework_filters/filters.py)下工作,我正在寻找解决方法。
很想听到任何更好的方法来解决这个问题。
提前谢谢!
答案 0 :(得分:1)
您可以使用序列化程序字段的source属性将相关对象字段置于顶层。
class MySerializer(serializers.ModelSerializer):
group_name = serializers.CharField(source='section.group.group_name')
class Meta:
model = MyModel
fields = ('group_name',)
但是,这不会消除提取相关对象的性能影响,因此仍需要在查询集上使用select_related和prefetch_related以获得最佳性能。
答案 1 :(得分:0)
过滤器与模型有关,而与其序列化器版本无关,因此即使您在序列化器输出中创建字段group_name
- 它也无助于过滤。实际上,我建议您发布有关RelatedFilter
的问题。
回答你的问题:
您可以使用SerializerMethodField向对象表示添加自定义字段。
class MyModelSerializer(serializers.ModelSerializer):
group_name = serializers.SerializerMethodField()
class Meta:
model = MyModel
def get_group_name(self, obj):
return obj.group_name