我的views.py
class IndexView(View):
"""
后台首页视图
"""
def get(self, request):
objs = Menu.objects.select_related( 'permission__content_type').only('name', 'url', 'icon', 'permission__codename','permission__content_type__app_label').filter(is_delete=False, is_visible=True, parent=None)
has_permissions = request.user.get_all_permissions()
menus = []
for menu in objs:
if f'{menu.permission.content_type.app_label}.{menu.permission.codename}' in has_permissions: #这会报.content_type错误
temp = {
'name': menu.name,
'icon': menu.icon
}
children = menu.children.filter(is_delete=False, is_visible=True)
if children:
temp['children'] = []
for child in children:
if f"{child.permission.content_type.app_label}.{child.permission.codename}" in has_permissions:
temp['children'].append({
'name': child.name,
'url': child.url
})
else:
if not menu.url:
continue
temp['url'] = menu.url
menus.append(temp)
return render(request, 'keqi_admin/admin.html', context={'menus': menus})
我的models.py
class Menu(BaseModel):
name = models.CharField('菜单名', max_length=48, help_text='菜单名',unique=True)
url = models.CharField('url', max_length=256, null=True, blank=True, help_text='url')
parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children',verbose_name='父菜单')
order = models.SmallIntegerField('排序', default=0)
permission = models.OneToOneField(Permission, on_delete=models.CASCADE, null=True)# 权限
icon = models.CharField('图标', max_length=48, default='fa-link')
codename = models.CharField('权限码', max_length=48, help_text='权限码', unique=True)
is_visible = models.BooleanField('是否可见', default=False)
class Meta:
ordering = ['-order']
db_table = 'kq_menu'
verbose_name = '菜单'
verbose_name_plural = verbose_name
def __str__(self):
return self.name
我的数据库
django_content_type表
表结构
auth_permission表
表结构
遍历时候打印下menu.permission 这个看看有没有值