1.models.py
2.正向查询
3.反向查询
1.models.py
class User(AbstractUser):
phone = models.CharField(max_length=11, verbose_name='手机号', unique=True, null=True)
code =models.CharField(verbose_name='邀请码', max_length=255, unique=True, null=True)
class Meta:
db_table = 'user'
def __str__(self):
return self.username
class Resource(models.Model):
"""资源表"""
name = models.CharField(max_length=30, verbose_name='名称',default='')
url = models.CharField(max_length=256, verbose_name='角色资源地址',default='')
status = models.IntegerField(verbose_name='角色资源状态', default=1)
pid=models.IntegerField(verbose_name='父id',default=0)
class Meta:
db_table = 'resource'
def __str__(self):
return self.name
class UserGroup(models.Model):
"""用户组的模型类"""
name = models.CharField(max_length=30, verbose_name='名称',default='')
user = models.ManyToManyField(User)
# 更改模型类: 从多对一改为多对多
resource = models.ManyToManyField(Resource)
class Meta:
db_table = 'groups'
def __str__(self):
return self.name
2.正向查询
当老大查询外键是-----正向查询
当外键查询老大是-----反向查询
用户组查询用户--------正向查询
group=UserGroup.objects.get(id=id)-------获取的是查询集
user = group. user.all() ---------获取用户组下面的全部用户的查询集
表名
<QuerySet [<User: liulili>,<User:cc>]>
ser = UserSer(user,many=True)
return Response(ser.data)
----相当[{‘id’:1,’username’:’lili’,’phone’:’11112222333’},
{‘id’:2,’username’:’cc’,’phone’:’11112222333’}]
# user_group查找user(正向)
class UserSet(APIView):
def get(self, request):
group = UserGroup.objects.get(id=1)
user = group.user.all()
ser = UserSer(user, many=True)
return Response(ser.data)
3.反向查询
用户查询用户组------反向查询
user = User.objects.get(id=1)-----------------获取的数据是:查询集
group = user.usergroup_set.all()-------------获取用户下面的全部用户组的查询集
表名_set 反向查询
<QuerySet [<UserGroup: 超级管理员>]>
ser = UserGroupSer(group,many=True)
return Response(ser.data)
结果:[ {'id':1,'name':'超级管理员','user':[1,2],'resource':[1,2,3,4] } ]
# user 查询user_group
class UserAPIView(APIView):
def get(self, request):
user = User.objects.get(id=1)
group = user.usergroup_set.all()
print('group',group)
ser = UserGroupSer(group, many=True)
return Response(ser.data)
当又反向查询又正向查询时候
eg:
user = User.objects.get(id=1)
group = user.usergroup_set.all()--------获取用户下面的全部用户组的查询集
result_list=[]
for user_group in group:
resource_query_list = user_group.resource.all()-----获取全部用户组的查询集下的资源
# 将对应的权限资源数据格式化 model_to_dict 是转转化为字典
resource_list = [model_to_dict(i) for i in resource_query_list if i.status == 1]
result_list.append({
'id': user_group.id,
'name':user_group.name,
'children': resource_list,
'desc': user_group.desc
})
return result_list
4.到这里就结束了,快去写写吧