SerializerMethodField

class MenuUserActionSerializer(serializers.ModelSerializer):
    brand = BrandSerializer(source="menu.brand")
    menu = MenuSerializer(read_only=True)
    menu_list = serializers.SerializerMethodField()
 
    @classmethod
    def get_menu_list(cls, obj):
        menu_qs = Menu.objects.raw(
            f"""
            WITh RECURSIVE menu_parent(id, parent_id, name, level, path, cycle) as (
                SELECT 	id,             
                        parent_id, 
                        name, 
                        level,
                        array[id],
                        false			
                FROM brand_menu
                WHERE id = {obj.menu.id}
 
                UNION ALL
 
                SELECT 	p.id, 
                        p.parent_id,
                        p.name,        
                        p.level,     
                        array_append(c.path, p.id),
                        p.id = any(c.path)
                FROM brand_menu p, menu_parent c
                WHERE p.id = c.parent_id
                        AND not cycle
            )
 
            SELECT * from menu_parent
            order by level
            """
        )
        menu_list_se = MenuSerializer(menu_qs, many=True)
        return menu_list_se.data
 
    class Meta:
        model = MenuUserAction
        fields = "__all__"


  • open/django-serializermethodfield.txt
  • 마지막으로 수정됨: 2021/03/15 02:16
  • 저자 127.0.0.1