django多对多有多层时,怎么根据最上层的对象获取最下层的数据
多层级多对多关联的时候,怎么直接通过最顶层拿到最底层的数据啊,比如用户表User
多对多关联角色表Role
,角色表Role
又多对多关联菜单表Menu
,我怎么直接根据user
对象拿到所有的menu
并序列化出来返回给前端。我目前在user model
里面实现了根据当前user
对象获取所有role
的方法roles()
,并在role model
里面实现了根据当前role
对象获取所有菜单的方法menus()
,那我怎么根据user
对象直接获取所有菜单呢,在user model
里怎么实现?
我试过先查出所有的roles
,然后遍历role
出来,再通过role
去获取所有的menus
,最终把所有的menus
放在一个list
里面,但是这个操作一点都不美观,我最种拿到的数据是一个普通的list
,而不是queryset
,无法序列化,不知道django
里面有没有黑科技完成这种事情,请求大神解答
class UserInfo(models.Model):
uid = models.CharField(max_length=32, unique=True, default=gen_id)
username = models.CharField(max_length=32, unique=True)
password = models.CharField(max_length=256, blank=False, null=False)
status = models.IntegerField(default=1)
create_time = models.DateTimeField(default=now)
update_time = models.DateTimeField(default=now)
class Meta:
db_table = 'user'
def roles(self):
"""
反查当前用户所有角色列表
:return:
"""
roles = self.role_set.all()
if len(roles) > 0:
return roles
return []
class Role(models.Model):
role_code = models.CharField(max_length=10, unique=True, null=False)
role_name = models.CharField(max_length=10, unique=True, null=False)
role_desc = models.CharField(max_length=50, null=False)
status = models.IntegerField(default=1)
users = models.ManyToManyField(UserInfo)
class Meta:
db_table = 'role'
verbose_name = '角色表'
verbose_name_plural = '角色表'
def menus(self):
menus = self.menu_set.all()
if len(menus) > 0:
return menus
return []
class Menu(models.Model):
name = models.CharField(max_length=10, unique=True, null=False)
icon_class = models.CharField(max_length=10, null=True)
status = models.IntegerField(default=1)
roles = models.ManyToManyField(Role)
class Meta:
db_table = 'menu'
verbose_name = '菜单表'
verbose_name_plural = '菜单表'
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论