zoukankan      html  css  js  c++  java
  • 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'})),

    最后效果:

    在这里插入图片描述

  • 相关阅读:
    C语言I博客作业05 sun
    C语言I博客作业08 sun
    C语言I博客作业02 sun
    C语言I博客作业04 sun
    elastix的web端口修改
    mysql.proc错误解决
    Client.Error.MessageSend 错误解决方案
    让secureCRT正确显示中文
    elastix的多个inbound route的设置
    PHP5.1时间相差8小时问题解决。
  • 原文地址:https://www.cnblogs.com/catgatp/p/13795258.html
Copyright © 2011-2022 走看看