add ai models
This commit is contained in:
@@ -173,11 +173,9 @@ class Command(BaseCommand):
|
||||
field_config = self.generate_grid_form_field(field)
|
||||
if field_config:
|
||||
grid_form_fields.append(field_config)
|
||||
|
||||
|
||||
# 生成 useColumns
|
||||
columns = []
|
||||
for field in business_fields + core_fields:
|
||||
columns.append(f" {{\n field: '{field.name}',\n title: '{getattr(field, 'verbose_name', field.name)}',\n }},")
|
||||
columns = self.get_columns_code(business_fields + core_fields)
|
||||
context = get_context(app_name, model_name, model, model_name_snake)
|
||||
context['form_fields'] = '\n'.join(form_fields)
|
||||
context['grid_form_fields'] = '\n'.join(grid_form_fields)
|
||||
@@ -218,28 +216,41 @@ class Command(BaseCommand):
|
||||
return 'any'
|
||||
|
||||
def generate_form_field(self, field):
|
||||
"""生成表单字段配置"""
|
||||
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') },"
|
||||
if isinstance(field, models.CharField):
|
||||
return f''' {{\n component: 'Input',\n fieldName: '{field_name}',\n label: '{field_label}',\n rules: z\n .string()\n .min(1, $t('ui.formRules.required', ['{field_label}']))\n .max(100, $t('ui.formRules.maxLength', ['{field_label}', 100])),\n }},'''
|
||||
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''' {{\n component: 'Input',\n componentProps: {{\n rows: 3,\n showCount: true,\n }},\n fieldName: '{field_name}',\n label: '{field_label}',\n rules: z\n .string()\n .max(500, $t('ui.formRules.maxLength', ['{field_label}', 500]))\n .optional(),\n }},'''
|
||||
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''' {{\n component: 'InputNumber',\n fieldName: '{field_name}',\n label: '{field_label}',\n }},'''
|
||||
return f"{{ component: 'InputNumber', fieldName: '{field_name}', label: '{field_label}' }},"
|
||||
elif isinstance(field, models.BooleanField):
|
||||
return f''' {{\n component: 'RadioGroup',\n componentProps: {{\n buttonStyle: 'solid',\n options: [\n {{ label: '开启', value: 1 }},\n {{ label: '关闭', value: 0 }},\n ],\n optionType: 'button',\n }},\n defaultValue: 1,\n fieldName: '{field_name}',\n label: '{field_label}',\n }},'''
|
||||
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''' {{\n component: 'Input',\n fieldName: '{field_name}',\n label: '{field_label}',\n }},'''
|
||||
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)
|
||||
# 查询表单一般只需要 component/fieldName/label,不需要 rules
|
||||
if field_name == 'status':
|
||||
return "{ component: 'Select', fieldName: 'status', label: '状态', componentProps: { allowClear: true, options: [{ label: '启用', value: 1 }, { label: '禁用', value: 0 }] } },"
|
||||
if isinstance(field, models.CharField):
|
||||
return f''' {{\n component: 'Input',\n fieldName: '{field_name}',\n label: '{field_label}',\n }},'''
|
||||
return f"{{ component: 'Input', fieldName: '{field_name}', label: '{field_label}' }},"
|
||||
elif isinstance(field, models.IntegerField):
|
||||
return f''' {{\n component: 'InputNumber',\n fieldName: '{field_name}',\n label: '{field_label}',\n }},'''
|
||||
# 其他类型同理
|
||||
return f"{{ component: 'InputNumber', fieldName: '{field_name}', label: '{field_label}' }},"
|
||||
else:
|
||||
return f''' {{\n component: 'Input',\n fieldName: '{field_name}',\n label: '{field_label}',\n }},'''
|
||||
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' } },")
|
||||
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) }},")
|
||||
continue
|
||||
columns.append(f"{{ field: '{field.name}', title: '{getattr(field, 'verbose_name', field.name)}' }},")
|
||||
return columns
|
||||
@@ -1,5 +1,7 @@
|
||||
# Generated by Django 5.2.1 on 2025-07-10 04:07
|
||||
# Generated by Django 5.2.1 on 2025-07-11 07:44
|
||||
|
||||
import django.contrib.auth.validators
|
||||
import django.utils.timezone
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
@@ -572,6 +574,45 @@ class Migration(migrations.Migration):
|
||||
verbose_name="创建人",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="user",
|
||||
name="date_joined",
|
||||
field=models.DateTimeField(
|
||||
db_comment="date joined",
|
||||
default=django.utils.timezone.now,
|
||||
verbose_name="date joined",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="user",
|
||||
name="email",
|
||||
field=models.EmailField(
|
||||
blank=True,
|
||||
db_comment="email address",
|
||||
max_length=254,
|
||||
verbose_name="email address",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="user",
|
||||
name="first_name",
|
||||
field=models.CharField(
|
||||
blank=True,
|
||||
db_comment="first name",
|
||||
max_length=150,
|
||||
verbose_name="first name",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="user",
|
||||
name="is_active",
|
||||
field=models.BooleanField(
|
||||
db_comment="active",
|
||||
default=True,
|
||||
help_text="Designates whether this user should be treated as active. Unselect this instead of deleting accounts.",
|
||||
verbose_name="active",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="user",
|
||||
name="is_deleted",
|
||||
@@ -579,6 +620,46 @@ class Migration(migrations.Migration):
|
||||
db_comment="是否软删除", default=False, verbose_name="是否软删除"
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="user",
|
||||
name="is_staff",
|
||||
field=models.BooleanField(
|
||||
db_comment="staff status",
|
||||
default=False,
|
||||
help_text="Designates whether the user can log into this admin site.",
|
||||
verbose_name="staff status",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="user",
|
||||
name="is_superuser",
|
||||
field=models.BooleanField(
|
||||
db_comment="superuser status",
|
||||
default=False,
|
||||
help_text="Designates that this user has all permissions without explicitly assigning them.",
|
||||
verbose_name="superuser status",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="user",
|
||||
name="last_login",
|
||||
field=models.DateTimeField(
|
||||
blank=True,
|
||||
db_comment="last login",
|
||||
null=True,
|
||||
verbose_name="last login",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="user",
|
||||
name="last_name",
|
||||
field=models.CharField(
|
||||
blank=True,
|
||||
db_comment="last name",
|
||||
max_length=150,
|
||||
verbose_name="last name",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="user",
|
||||
name="modifier",
|
||||
@@ -591,6 +672,13 @@ class Migration(migrations.Migration):
|
||||
verbose_name="修改人",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="user",
|
||||
name="password",
|
||||
field=models.CharField(
|
||||
db_comment="password", max_length=128, verbose_name="password"
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="user",
|
||||
name="remark",
|
||||
@@ -614,4 +702,17 @@ class Migration(migrations.Migration):
|
||||
verbose_name="修改时间",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="user",
|
||||
name="username",
|
||||
field=models.CharField(
|
||||
db_comment="username",
|
||||
error_messages={"unique": "A user with that username already exists."},
|
||||
help_text="Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.",
|
||||
max_length=150,
|
||||
unique=True,
|
||||
validators=[django.contrib.auth.validators.UnicodeUsernameValidator()],
|
||||
verbose_name="username",
|
||||
),
|
||||
),
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user