使用python3.x和Django Rest框架。我有一个带有Recursive Field
(self)的序列化程序,它按预期工作。但是,我需要一种方法来最初过滤由active = True
返回的嵌套子元素。在
我尝试过用不同的方法按active=True来筛选子级,但我无法在序列化程序中返回的嵌套子级上使用此方法。在
这是我所拥有的。
class MenuListSerializer(serializers.ModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='menu_detail')
children = RecursiveField(many=True, required=False)
class RecursiveField(serializers.Serializer):
"""
Self-referential field for MPTT.
"""
def to_representation(self, value):
serializer = self.parent.parent.__class__(value, context=self.context)
return serializer.data
这是我尝试过的,但得到的错误是ListSerializer'对象没有属性'queryset'但是,我甚至不确定这是否有效。在
^{pr2}$
如果我理解得很好,您正在尝试以分层方式序列化
Menu
对象。 要做到这一点,我想您递归地序列化您的顶层菜单对象,不是吗?(否则您将在顶层获得所有菜单对象)。在为了能够仅筛选活动子级,我建议在您的模型上创建一个
active_children
属性:然后可以将其用作序列化程序中
^{pr2}$children
字段的源:现在序列化时应该只有活动的子对象。在
注意,您还应该过滤查询集中的顶级对象,因为上面的筛选只适用于
Menu
对象中的子对象。在相关问题 更多 >
编程相关推荐