Parcourir la source

查询设备信息图标 - 未添加其他语言的自动返回英文

linhaohong il y a 10 mois
Parent
commit
9aa8529977
1 fichiers modifiés avec 53 ajouts et 19 suppressions
  1. 53 19
      AdminController/DeviceManagementController.py

+ 53 - 19
AdminController/DeviceManagementController.py

@@ -966,28 +966,62 @@ class DeviceManagement(View):
                                                                                               'name', 'sort', 'config',
                                                                                               'iconV2',
                                                                                               'app_device_type__app_version_number_id')
-                if api_version == "V2":
-                    for app_bundle in app_bundle_qs:
+
+                # 使用lang="en"来补全缺失的数据
+                en_lang_qs = AppBundle.objects.filter(
+                    app_bundle_id=app_bundle_id,
+                    app_device_type__devicenamelanguage__lang="en",
+                    app_device_type__app_version_number_id=version_number
+                ).annotate(
+                    model=F('app_device_type__model'),
+                    type=F('app_device_type__type'),
+                    icon=F('app_device_type__icon'),
+                    name=F('app_device_type__devicenamelanguage__name'),
+                    iconV2=F('app_device_type__iconV2'),
+                    sort=F('app_device_type__devicenamelanguage__sort'),
+                    config=F('app_device_type__config'),
+                    app_version_number_id=F('app_device_type__app_version_number_id')
+                ).values('model', 'type', 'icon', 'name', 'sort', 'config', 'iconV2',
+                         'app_device_type__app_version_number_id')
+
+                # 转换查询集为字典
+                current_lang_data = {item['type']: item for item in app_bundle_qs}
+                en_lang_data = {item['type']: item for item in en_lang_qs}
+
+                # 合并数据,优先使用当前语言的数据,缺少的字段用英文补充
+                for type, en_data in en_lang_data.items():
+                    current_data = current_lang_data.get(type, {})
+                    merged_data = {
+                        'type': en_data['type'],
+                        'model': current_data.get('model', en_data['model']),
+                        'icon': current_data.get('icon', en_data['icon']),
+                        'name': current_data.get('name', en_data['name']),
+                        'sort': current_data.get('sort', en_data['sort']),
+                        'config': current_data.get('config', en_data['config']),
+                        'iconV2': current_data.get('iconV2', en_data['iconV2']),
+                        'app_device_type__app_version_number_id': current_data.get(
+                            'app_device_type__app_version_number_id',
+                            en_data['app_device_type__app_version_number_id']),
+                    }
+                    if api_version == "V2":
                         app_bundle_list.append({
-                            'model': app_bundle['model'],
-                            'type': app_bundle['type'],
-                            'icon': app_bundle['iconV2'] if app_bundle['iconV2'] != "" else app_bundle['icon'],
-                            'name': app_bundle['name'],
-                            'sort': app_bundle['sort'],
-                            'config': app_bundle['config'],
-                            'app_device_type__app_version_number_id': app_bundle[
-                                'app_device_type__app_version_number_id'],
+                            'model': merged_data['model'],
+                            'type': merged_data['type'],
+                            'icon': merged_data['iconV2'] if merged_data['iconV2'] != "" else merged_data['icon'],
+                            'name': merged_data['name'],
+                            'sort': merged_data['sort'],
+                            'config': merged_data['config'],
+                            'app_device_type__app_version_number_id': merged_data['app_device_type__app_version_number_id'],
                         })
-                else:
-                    for app_bundle in app_bundle_qs:
+                    else:
                         app_bundle_list.append({
-                            'model': app_bundle['model'],
-                            'type': app_bundle['type'],
-                            'icon': app_bundle['icon'],
-                            'name': app_bundle['name'],
-                            'sort': app_bundle['sort'],
-                            'config': app_bundle['config'],
-                            'app_device_type__app_version_number_id': app_bundle[
+                            'model': merged_data['model'],
+                            'type': merged_data['type'],
+                            'icon': merged_data['icon'],
+                            'name': merged_data['name'],
+                            'sort': merged_data['sort'],
+                            'config': merged_data['config'],
+                            'app_device_type__app_version_number_id': merged_data[
                                 'app_device_type__app_version_number_id'],
                         })
             dvr_list = [app_bundle for app_bundle in app_bundle_list if app_bundle['model'] == 1]