• DRF(Django-Rest-FrameWork)非主外键自关联


    model.py

    class SysPermission(models.Model):
        id = models.CharField(db_column='Id', primary_key=True, max_length=50)  # Field name made lowercase.
        parentid = models.CharField(db_column='ParentId', max_length=50, blank=True, null=True)  # Field name made lowercase.
        layer = models.IntegerField(db_column='Layer', blank=True, null=True)  # Field name made lowercase.
        encode = models.CharField(db_column='EnCode', max_length=50, blank=True, null=True)  # Field name made lowercase.
        name = models.CharField(db_column='Name', max_length=50, blank=True, null=True)  # Field name made lowercase.
        jsevent = models.CharField(db_column='JsEvent', max_length=50, blank=True, null=True)  # Field name made lowercase.
        icon = models.CharField(db_column='Icon', max_length=50, blank=True, null=True)  # Field name made lowercase.
        url = models.CharField(db_column='Url', max_length=255, blank=True, null=True)  # Field name made lowercase.
        remark = models.CharField(db_column='Remark', max_length=255, blank=True, null=True)  # Field name made lowercase.
        type = models.IntegerField(db_column='Type', blank=True, null=True)  # Field name made lowercase.
        sortcode = models.IntegerField(db_column='SortCode', blank=True, null=True)  # Field name made lowercase.
        ispublic = models.IntegerField(db_column='IsPublic', blank=True, null=True)  # Field name made lowercase.
        isenable = models.IntegerField(db_column='IsEnable', blank=True, null=True)  # Field name made lowercase.
        isedit = models.IntegerField(db_column='IsEdit', blank=True, null=True)  # Field name made lowercase.
        deletemark = models.IntegerField(db_column='DeleteMark', blank=True, null=True)  # Field name made lowercase.
        createuser = models.CharField(db_column='CreateUser', max_length=50, blank=True, null=True)  # Field name made lowercase.
        createtime = models.DateTimeField(db_column='CreateTime', max_length=50, blank=True, null=True, auto_now_add=True)  # Field name made lowercase.
        modifyuser = models.CharField(db_column='ModifyUser', max_length=50, blank=True, null=True)  # Field name made lowercase.
        modifytime = models.DateTimeField(db_column='ModifyTime', max_length=50, blank=True, null=True, auto_now=True)  # Field name made lowercase.
    
        class Meta:
            db_table = 'sys_permission'

    序列器

    class sysPermissionSerializer(serializers.ModelSerializer):
        modifytime = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S",  read_only=True)
        children = serializers.SerializerMethodField()
        def get_children(self, data):
            queryset = SysPermission.objects.filter(parentid=data.id).all()
            children = sysPermissionSerializer(queryset,many=True).data
            if children:
                return children
            else:
                return ""
    
        class Meta:
            model = SysPermission
            fields = ('id', 'parentid', 'name', 'icon',  'type', 'url', 'sortcode', 'isenable', 'jsevent', 'modifytime', 'children')
            read_only_fields = ('id',)

    views.py

    class sysPermissionViewSet(viewsets.ModelViewSet):
        """
        菜单接口
        """
        queryset = SysPermission.objects.all()
        serializer_class = sysPermissionSerializer
        # filter_fields = ('id',)
        # pagination_class = sysUserSetPagination
    
        def get(self, request:Response, *args, **kwargs):
            code = Response.status_code
            queryset = SysPermission.objects.filter(parentid__in='0').all()
            serializer = self.get_serializer(instance=queryset, many=True)
            json = returnJson(code, serializer.data) #returnJson是我自己封装的返回方法
            return Response(json)

    urls.py

    path('sysPermission', sysPermissionViewSet.as_view({'get':'get'})),

    最后效果:

    在这里插入图片描述

  • 相关阅读:
    Linux命令全训练
    解决maven中静态资源只能放到properties中的问题
    Mybatis出现错误org.apache.ibatis.executor.ExecutorException: No constructor found in
    Fence Repair
    Saruman's Army
    Best Cow Line
    区间调度问题
    硬币问题
    迷宫最短路径
    Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) A. Oath of the Night's Watch
  • 原文地址:https://www.cnblogs.com/catgatp/p/13795258.html
Copyright © 2020-2023  润新知