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() |