优化全局注入dict_data

This commit is contained in:
XIE7654
2025-07-16 13:56:02 +08:00
parent baa650ea64
commit 3fe272ffca
11 changed files with 219 additions and 24 deletions

View File

@@ -219,38 +219,124 @@ class Command(BaseCommand):
field_name = field.name
field_label = getattr(field, 'verbose_name', field_name)
if field_name == 'status':
return "{ component: 'RadioGroup', componentProps: { buttonStyle: 'solid', options: [{ label: $t('common.enabled'), value: 1 }, { label: $t('common.disabled'), value: 0 }], optionType: 'button' }, defaultValue: 1, fieldName: 'status', label: $t('system.status') },"
return f''' {{
component: 'RadioGroup',
componentProps: {{
buttonStyle: 'solid',
options: [
{{ label: $t('common.enabled'), value: 1 }},
{{ label: $t('common.disabled'), value: 0 }},
],
optionType: 'button',
}},
defaultValue: 1,
fieldName: 'status',
label: $t('system.status'),
}},'''
if isinstance(field, models.CharField):
return f"{{ component: 'Input', fieldName: '{field_name}', label: '{field_label}', rules: z.string().min(1, $t('ui.formRules.required', ['{field_label}'])).max(100, $t('ui.formRules.maxLength', ['{field_label}', 100])) }},"
return f''' {{
component: 'Input',
fieldName: '{field_name}',
label: '{field_label}',
rules: z.string().min(1, $t('ui.formRules.required', ['{field_label}'])).max(100, $t('ui.formRules.maxLength', ['{field_label}', 100])),
}},'''
elif isinstance(field, models.TextField):
return f"{{ component: 'Input', componentProps: {{ rows: 3, showCount: true }}, fieldName: '{field_name}', label: '{field_label}', rules: z.string().max(500, $t('ui.formRules.maxLength', ['{field_label}', 500])).optional() }},"
return f''' {{
component: 'Input',
componentProps: {{ rows: 3, showCount: true }},
fieldName: '{field_name}',
label: '{field_label}',
rules: z.string().max(500, $t('ui.formRules.maxLength', ['{field_label}', 500])).optional(),
}},'''
elif isinstance(field, models.IntegerField):
return f"{{ component: 'InputNumber', fieldName: '{field_name}', label: '{field_label}' }},"
return f''' {{
component: 'InputNumber',
fieldName: '{field_name}',
label: '{field_label}',
}},'''
elif isinstance(field, models.BooleanField):
return f"{{ component: 'RadioGroup', componentProps: {{ buttonStyle: 'solid', options: [{{ label: '开启', value: 1 }}, {{ label: '关闭', value: 0 }}], optionType: 'button' }}, defaultValue: 1, fieldName: '{field_name}', label: '{field_label}' }},"
return f''' {{
component: 'RadioGroup',
componentProps: {{
buttonStyle: 'solid',
options: [
{{ label: '开启', value: 1 }},
{{ label: '关闭', value: 0 }},
],
optionType: 'button',
}},
defaultValue: 1,
fieldName: '{field_name}',
label: '{field_label}',
}},'''
else:
return f"{{ component: 'Input', fieldName: '{field_name}', label: '{field_label}' }},"
return f''' {{
component: 'Input',
fieldName: '{field_name}',
label: '{field_label}',
}},'''
def generate_grid_form_field(self, field):
field_name = field.name
field_label = getattr(field, 'verbose_name', field_name)
if field_name == 'status':
return "{ component: 'Select', fieldName: 'status', label: '状态', componentProps: { allowClear: true, options: [{ label: '启用', value: 1 }, { label: '禁用', value: 0 }] } },"
return f''' {{
component: 'Select',
fieldName: 'status',
label: '状态',
componentProps: {{
allowClear: true,
options: [
{{ label: '启用', value: 1 }},
{{ label: '禁用', value: 0 }},
],
}},
}},'''
if isinstance(field, models.CharField):
return f"{{ component: 'Input', fieldName: '{field_name}', label: '{field_label}' }},"
return f''' {{
component: 'Input',
fieldName: '{field_name}',
label: '{field_label}',
}},'''
elif isinstance(field, models.IntegerField):
return f"{{ component: 'InputNumber', fieldName: '{field_name}', label: '{field_label}' }},"
return f''' {{
component: 'InputNumber',
fieldName: '{field_name}',
label: '{field_label}',
}},'''
else:
return f"{{ component: 'Input', fieldName: '{field_name}', label: '{field_label}' }},"
return f''' {{
component: 'Input',
fieldName: '{field_name}',
label: '{field_label}',
}},'''
def get_columns_code(self, fields):
columns = []
for field in fields:
if field.name == 'status':
columns.append("{ field: 'status', title: '状态', cellRender: { name: 'CellTag' } },")
columns.append(
""" {
field: 'status',
title: '状态',
cellRender: { name: 'CellTag' },
},"""
)
continue
if isinstance(field, (models.DateField, models.DateTimeField)):
columns.append(f"{{ field: '{field.name}', title: '{getattr(field, 'verbose_name', field.name)}', width: 150, formatter: ({{ cellValue }}) => format_datetime(cellValue) }},")
columns.append(
f""" {{
field: '{field.name}',
title: '{getattr(field, 'verbose_name', field.name)}',
width: 150,
formatter: ({{ cellValue }}) => format_datetime(cellValue),
}},"""
)
continue
columns.append(f"{{ field: '{field.name}', title: '{getattr(field, 'verbose_name', field.name)}' }},")
columns.append(
f""" {{
field: '{field.name}',
title: '{getattr(field, 'verbose_name', field.name)}',
}},"""
)
return columns

View File

@@ -1,6 +1,8 @@
from $app_name.models import $model_name
from utils.serializers import CustomModelSerializer
from utils.custom_model_viewSet import CustomModelViewSet
from django_filters import rest_framework as filters
class ${model_name}Serializer(CustomModelSerializer):
"""
@@ -12,13 +14,20 @@ class ${model_name}Serializer(CustomModelSerializer):
read_only_fields = ['id', 'create_time', 'update_time']
class $model_nameFilter(filters.FilterSet):
class Meta:
model = $model_name
fields = [$filterset_fields]
class ${model_name}ViewSet(CustomModelViewSet):
"""
$verbose_name 视图集
"""
queryset = $model_name.objects.filter(is_deleted=False).order_by('-id')
serializer_class = ${model_name}Serializer
filterset_fields = [$filterset_fields]
filterset_class = [$filterset_fields]
search_fields = ['name'] # 根据实际字段调整
ordering_fields = ['create_time', 'id']
ordering = ['-create_time']

View File

@@ -22,7 +22,7 @@ class DictDataFilter(filters.FilterSet):
class DictDataLabelValueSerializer(serializers.ModelSerializer):
dict_type_value = serializers.CharField(source='dict_type.value')
dict_type = serializers.CharField(source='dict_type.value')
class Meta:
model = DictData
@@ -39,4 +39,4 @@ class DictDataViewSet(CustomModelViewSet):
# 复用filterset_class过滤DictData
queryset = self.get_queryset().filter(status=CommonStatus.ENABLED)
serializer = DictDataLabelValueSerializer(queryset, many=True)
return Response(serializer.data)
return self._build_response(data=serializer.data)