56 lines
1.7 KiB
Python
56 lines
1.7 KiB
Python
from functools import wraps
|
|
|
|
from django.db.models import Func, F, OuterRef, Exists
|
|
from django.test import TestCase
|
|
import django
|
|
import os
|
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "application.settings")
|
|
django.setup()
|
|
from dvadmin.system.models import Menu, RoleMenuPermission, RoleMenuButtonPermission, MenuButton
|
|
|
|
|
|
import time
|
|
|
|
def timing_decorator(func):
|
|
@wraps(func)
|
|
def wrapper(*args, **kwargs):
|
|
start_time = time.time()
|
|
result = func(*args, **kwargs)
|
|
end_time = time.time()
|
|
run_time = end_time - start_time
|
|
print(f"{func.__name__} ran in {run_time:.6f} seconds")
|
|
return result
|
|
return wrapper
|
|
|
|
@timing_decorator
|
|
def getMenu():
|
|
data = []
|
|
queryset = Menu.objects.filter(status=1, is_catalog=False).values('name', 'id')
|
|
for item in queryset:
|
|
parent_list = Menu.get_all_parent(item['id'])
|
|
names = [d["name"] for d in parent_list]
|
|
completeName = "/".join(names)
|
|
isCheck = RoleMenuPermission.objects.filter(
|
|
menu__id=item['id'],
|
|
role__id=1,
|
|
).exists()
|
|
mbCheck = RoleMenuButtonPermission.objects.filter(
|
|
menu_button = OuterRef("pk"),
|
|
role__id=1,
|
|
)
|
|
btns = MenuButton.objects.filter(
|
|
menu__id=item['id'],
|
|
).annotate(isCheck=Exists(mbCheck)).values('id', 'name', 'value', 'isCheck',data_range=F('menu_button_permission__data_range'))
|
|
# print(b)
|
|
dicts = {
|
|
'name': completeName,
|
|
'id': item['id'],
|
|
'isCheck': isCheck,
|
|
'btns':btns
|
|
}
|
|
print(dicts)
|
|
data.append(dicts)
|
|
# print(data)
|
|
|
|
if __name__ == '__main__':
|
|
getMenu() |