From f29ba1319c034a6276c958c7e766459969088415 Mon Sep 17 00:00:00 2001 From: ibuler Date: Thu, 20 Feb 2025 10:03:35 +0800 Subject: [PATCH] perf: update some choice --- apps/accounts/migrations/0001_initial.py | 2 +- apps/accounts/serializers/automations/base.py | 16 +-- apps/assets/migrations/0001_initial.py | 114 ++++++++++++------ apps/assets/serializers/automations/base.py | 15 +-- apps/common/const/choices.py | 4 +- apps/i18n/core/en/LC_MESSAGES/django.po | 4 +- apps/i18n/core/ja/LC_MESSAGES/django.po | 4 +- apps/i18n/core/zh/LC_MESSAGES/django.po | 4 +- apps/i18n/core/zh_Hant/LC_MESSAGES/django.po | 4 +- 9 files changed, 97 insertions(+), 70 deletions(-) diff --git a/apps/accounts/migrations/0001_initial.py b/apps/accounts/migrations/0001_initial.py index f508c266b..817b3246c 100644 --- a/apps/accounts/migrations/0001_initial.py +++ b/apps/accounts/migrations/0001_initial.py @@ -94,7 +94,7 @@ class Migration(migrations.Migration): ('snapshot', models.JSONField(blank=True, default=dict, encoder=common.db.encoder.ModelJSONFieldEncoder, null=True, verbose_name='Account backup snapshot')), - ('trigger', models.CharField(choices=[('manual', 'Manual trigger'), ('timing', 'Timing trigger')], + ('trigger', models.CharField(choices=[('manual', 'Manual'), ('timing', 'Timing')], default='manual', max_length=128, verbose_name='Trigger mode')), ('reason', models.CharField(blank=True, max_length=1024, null=True, verbose_name='Reason')), ('is_success', models.BooleanField(default=False, verbose_name='Is success')), diff --git a/apps/accounts/serializers/automations/base.py b/apps/accounts/serializers/automations/base.py index 4bb9038b2..828aa33c8 100644 --- a/apps/accounts/serializers/automations/base.py +++ b/apps/accounts/serializers/automations/base.py @@ -1,11 +1,10 @@ from django.utils.translation import gettext_lazy as _ from rest_framework import serializers -from accounts.models import AutomationExecution from assets.const import AutomationTypes from assets.models import Asset, Node, BaseAutomation -from common.const.choices import Trigger -from common.serializers.fields import ObjectRelatedField, LabeledChoiceField +from assets.serializers.automations import AutomationExecutionSerializer as AssetAutomationExecutionSerializer +from common.serializers.fields import ObjectRelatedField from common.utils import get_logger from ops.mixin import PeriodTaskSerializerMixin from orgs.mixins.serializers import BulkOrgResourceModelSerializer @@ -49,17 +48,8 @@ class BaseAutomationSerializer(PeriodTaskSerializerMixin, BulkOrgResourceModelSe raise NotImplementedError -class AutomationExecutionSerializer(serializers.ModelSerializer): +class AutomationExecutionSerializer(AssetAutomationExecutionSerializer): snapshot = serializers.SerializerMethodField(label=_('Automation snapshot')) - type = serializers.ChoiceField(choices=AutomationTypes.choices, write_only=True, label=_('Type')) - trigger = LabeledChoiceField(choices=Trigger.choices, read_only=True, label=_("Trigger mode")) - - class Meta: - model = AutomationExecution - read_only_fields = [ - 'trigger', 'date_start', 'date_finished', 'snapshot', 'status', 'duration' - ] - fields = ['id', 'automation', 'type'] + read_only_fields @staticmethod def get_snapshot(obj): diff --git a/apps/assets/migrations/0001_initial.py b/apps/assets/migrations/0001_initial.py index 63133bbc2..d62a3cca9 100644 --- a/apps/assets/migrations/0001_initial.py +++ b/apps/assets/migrations/0001_initial.py @@ -11,7 +11,6 @@ import common.db.fields class Migration(migrations.Migration): - initial = True dependencies = [ @@ -27,8 +26,11 @@ class Migration(migrations.Migration): ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')), ('comment', models.TextField(blank=True, default='', verbose_name='Comment')), ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), - ('org_id', models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')), - ('connectivity', models.CharField(choices=[('-', 'Unknown'), ('na', 'N/A'), ('ok', 'OK'), ('err', 'Error')], default='-', max_length=16, verbose_name='Connectivity')), + ('org_id', + models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')), + ('connectivity', + models.CharField(choices=[('-', 'Unknown'), ('na', 'N/A'), ('ok', 'OK'), ('err', 'Error')], + default='-', max_length=16, verbose_name='Connectivity')), ('date_verified', models.DateTimeField(null=True, verbose_name='Date verified')), ('name', models.CharField(max_length=128, verbose_name='Name')), ('address', models.CharField(db_index=True, max_length=767, verbose_name='Address')), @@ -39,21 +41,27 @@ class Migration(migrations.Migration): options={ 'verbose_name': 'Asset', 'ordering': [], - 'permissions': [('refresh_assethardwareinfo', 'Can refresh asset hardware info'), ('test_assetconnectivity', 'Can test asset connectivity'), ('match_asset', 'Can match asset'), ('change_assetnodes', 'Can change asset nodes')], + 'permissions': [('refresh_assethardwareinfo', 'Can refresh asset hardware info'), + ('test_assetconnectivity', 'Can test asset connectivity'), + ('match_asset', 'Can match asset'), ('change_assetnodes', 'Can change asset nodes')], }, - bases=(assets.models.asset.common.NodesRelationMixin, assets.models.asset.common.JSONFilterMixin, models.Model), + bases=( + assets.models.asset.common.NodesRelationMixin, assets.models.asset.common.JSONFilterMixin, models.Model), ), migrations.CreateModel( name='AutomationExecution', fields=[ - ('org_id', models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')), + ('org_id', + models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')), ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), ('status', models.CharField(default='pending', max_length=16, verbose_name='Status')), ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date created')), ('date_start', models.DateTimeField(db_index=True, null=True, verbose_name='Date start')), ('date_finished', models.DateTimeField(null=True, verbose_name='Date finished')), - ('snapshot', common.db.fields.EncryptJsonDictTextField(blank=True, default=dict, null=True, verbose_name='Automation snapshot')), - ('trigger', models.CharField(choices=[('manual', 'Manual trigger'), ('timing', 'Timing trigger')], default='manual', max_length=128, verbose_name='Trigger mode')), + ('snapshot', common.db.fields.EncryptJsonDictTextField(blank=True, default=dict, null=True, + verbose_name='Automation snapshot')), + ('trigger', models.CharField(choices=[('manual', 'Manual'), ('timing', 'Timing')], default='manual', + max_length=128, verbose_name='Trigger mode')), ], options={ 'verbose_name': 'Automation task execution', @@ -69,7 +77,8 @@ class Migration(migrations.Migration): ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')), ('comment', models.TextField(blank=True, default='', verbose_name='Comment')), ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), - ('org_id', models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')), + ('org_id', + models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')), ('name', models.CharField(max_length=128, verbose_name='Name')), ('is_periodic', models.BooleanField(default=False, verbose_name='Periodic run')), ('interval', models.IntegerField(blank=True, default=24, null=True, verbose_name='Interval')), @@ -92,7 +101,8 @@ class Migration(migrations.Migration): ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')), ('comment', models.TextField(blank=True, default='', verbose_name='Comment')), ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), - ('org_id', models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')), + ('org_id', + models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')), ('name', models.CharField(max_length=128, verbose_name='Name')), ], options={ @@ -108,7 +118,8 @@ class Migration(migrations.Migration): ('date_created', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date created')), ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')), ('comment', models.TextField(blank=True, default='', verbose_name='Comment')), - ('org_id', models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')), + ('org_id', + models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')), ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), ('key', models.CharField(max_length=64, unique=True, verbose_name='Key')), ('value', models.CharField(max_length=128, verbose_name='Value')), @@ -123,7 +134,8 @@ class Migration(migrations.Migration): 'ordering': ['parent_key', 'value'], 'permissions': [('match_node', 'Can match node')], }, - bases=(models.Model, assets.models.node.SomeNodesMixin, assets.models.node.FamilyMixin, assets.models.node.NodeAssetsMixin), + bases=(models.Model, assets.models.node.SomeNodesMixin, assets.models.node.FamilyMixin, + assets.models.node.NodeAssetsMixin), ), migrations.CreateModel( name='Platform', @@ -139,7 +151,9 @@ class Migration(migrations.Migration): ('type', models.CharField(default='linux', max_length=32, verbose_name='Type')), ('meta', common.db.fields.JsonDictTextField(blank=True, null=True, verbose_name='Meta')), ('internal', models.BooleanField(default=False, verbose_name='Internal')), - ('charset', models.CharField(choices=[('utf-8', 'UTF-8'), ('gbk', 'GBK')], default='utf-8', max_length=8, verbose_name='Charset')), + ('charset', + models.CharField(choices=[('utf-8', 'UTF-8'), ('gbk', 'GBK')], default='utf-8', max_length=8, + verbose_name='Charset')), ('domain_enabled', models.BooleanField(default=True, verbose_name='Gateway enabled')), ('su_enabled', models.BooleanField(default=False, verbose_name='Su enabled')), ('su_method', models.CharField(blank=True, max_length=32, null=True, verbose_name='Su method')), @@ -152,7 +166,9 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Cloud', fields=[ - ('asset_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='assets.asset')), + ('asset_ptr', + models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, + primary_key=True, serialize=False, to='assets.asset')), ], options={ 'verbose_name': 'Cloud', @@ -162,7 +178,9 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Custom', fields=[ - ('asset_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='assets.asset')), + ('asset_ptr', + models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, + primary_key=True, serialize=False, to='assets.asset')), ], options={ 'verbose_name': 'Custom asset', @@ -172,7 +190,9 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Database', fields=[ - ('asset_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='assets.asset')), + ('asset_ptr', + models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, + primary_key=True, serialize=False, to='assets.asset')), ('db_name', models.CharField(blank=True, max_length=1024, verbose_name='Database')), ('use_ssl', models.BooleanField(default=False, verbose_name='Use SSL')), ('ca_cert', common.db.fields.EncryptTextField(blank=True, verbose_name='CA cert')), @@ -188,7 +208,9 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Device', fields=[ - ('asset_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='assets.asset')), + ('asset_ptr', + models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, + primary_key=True, serialize=False, to='assets.asset')), ], options={ 'verbose_name': 'Device', @@ -198,7 +220,9 @@ class Migration(migrations.Migration): migrations.CreateModel( name='GPT', fields=[ - ('asset_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='assets.asset')), + ('asset_ptr', + models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, + primary_key=True, serialize=False, to='assets.asset')), ('proxy', models.CharField(blank=True, default='', max_length=128, verbose_name='Proxy')), ], options={ @@ -209,7 +233,9 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Host', fields=[ - ('asset_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='assets.asset')), + ('asset_ptr', + models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, + primary_key=True, serialize=False, to='assets.asset')), ], options={ 'verbose_name': 'Host', @@ -219,11 +245,17 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Web', fields=[ - ('asset_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='assets.asset')), - ('autofill', models.CharField(choices=[('no', 'Disabled'), ('basic', 'Basic'), ('script', 'Script')], default='basic', max_length=16, verbose_name='Autofill')), - ('username_selector', models.CharField(blank=True, default='', max_length=128, verbose_name='Username selector')), - ('password_selector', models.CharField(blank=True, default='', max_length=128, verbose_name='Password selector')), - ('submit_selector', models.CharField(blank=True, default='', max_length=128, verbose_name='Submit selector')), + ('asset_ptr', + models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, + primary_key=True, serialize=False, to='assets.asset')), + ('autofill', models.CharField(choices=[('no', 'Disabled'), ('basic', 'Basic'), ('script', 'Script')], + default='basic', max_length=16, verbose_name='Autofill')), + ('username_selector', + models.CharField(blank=True, default='', max_length=128, verbose_name='Username selector')), + ('password_selector', + models.CharField(blank=True, default='', max_length=128, verbose_name='Password selector')), + ('submit_selector', + models.CharField(blank=True, default='', max_length=128, verbose_name='Submit selector')), ('script', models.JSONField(blank=True, default=list, verbose_name='Script')), ], options={ @@ -237,7 +269,8 @@ class Migration(migrations.Migration): ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=32, verbose_name='Name')), ('port', models.IntegerField(verbose_name='Port')), - ('asset', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='protocols', to='assets.asset', verbose_name='Asset')), + ('asset', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='protocols', + to='assets.asset', verbose_name='Asset')), ], ), migrations.CreateModel( @@ -251,7 +284,8 @@ class Migration(migrations.Migration): ('default', models.BooleanField(default=False, verbose_name='Default')), ('public', models.BooleanField(default=True, verbose_name='Public')), ('setting', models.JSONField(default=dict, verbose_name='Setting')), - ('platform', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='protocols', to='assets.platform')), + ('platform', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='protocols', + to='assets.platform')), ], ), migrations.CreateModel( @@ -264,24 +298,32 @@ class Migration(migrations.Migration): ('ping_method', models.CharField(blank=True, max_length=32, null=True, verbose_name='Ping method')), ('ping_params', models.JSONField(default=dict, verbose_name='Ping params')), ('gather_facts_enabled', models.BooleanField(default=False, verbose_name='Gather facts enabled')), - ('gather_facts_method', models.TextField(blank=True, max_length=32, null=True, verbose_name='Gather facts method')), + ('gather_facts_method', + models.TextField(blank=True, max_length=32, null=True, verbose_name='Gather facts method')), ('gather_facts_params', models.JSONField(default=dict, verbose_name='Gather facts params')), ('change_secret_enabled', models.BooleanField(default=False, verbose_name='Change secret enabled')), - ('change_secret_method', models.TextField(blank=True, max_length=32, null=True, verbose_name='Change secret method')), + ('change_secret_method', + models.TextField(blank=True, max_length=32, null=True, verbose_name='Change secret method')), ('change_secret_params', models.JSONField(default=dict, verbose_name='Change secret params')), ('push_account_enabled', models.BooleanField(default=False, verbose_name='Push account enabled')), - ('push_account_method', models.TextField(blank=True, max_length=32, null=True, verbose_name='Push account method')), + ('push_account_method', + models.TextField(blank=True, max_length=32, null=True, verbose_name='Push account method')), ('push_account_params', models.JSONField(default=dict, verbose_name='Push account params')), ('verify_account_enabled', models.BooleanField(default=False, verbose_name='Verify account enabled')), - ('verify_account_method', models.TextField(blank=True, max_length=32, null=True, verbose_name='Verify account method')), + ('verify_account_method', + models.TextField(blank=True, max_length=32, null=True, verbose_name='Verify account method')), ('verify_account_params', models.JSONField(default=dict, verbose_name='Verify account params')), ('gather_accounts_enabled', models.BooleanField(default=False, verbose_name='Gather facts enabled')), - ('gather_accounts_method', models.TextField(blank=True, max_length=32, null=True, verbose_name='Gather facts method')), + ('gather_accounts_method', + models.TextField(blank=True, max_length=32, null=True, verbose_name='Gather facts method')), ('gather_accounts_params', models.JSONField(default=dict, verbose_name='Gather facts params')), ('remove_account_enabled', models.BooleanField(default=False, verbose_name='Remove account enabled')), - ('remove_account_method', models.TextField(blank=True, max_length=32, null=True, verbose_name='Remove account method')), + ('remove_account_method', + models.TextField(blank=True, max_length=32, null=True, verbose_name='Remove account method')), ('remove_account_params', models.JSONField(default=dict, verbose_name='Remove account params')), - ('platform', models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='automation', to='assets.platform')), + ('platform', + models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='automation', + to='assets.platform')), ], ), migrations.CreateModel( @@ -293,10 +335,12 @@ class Migration(migrations.Migration): ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')), ('comment', models.TextField(blank=True, default='', verbose_name='Comment')), ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), - ('org_id', models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')), + ('org_id', + models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')), ('name', models.CharField(max_length=128, verbose_name='Name')), ('value', models.CharField(max_length=128, verbose_name='Value')), - ('category', models.CharField(choices=[('S', 'System'), ('U', 'User')], default='U', max_length=128, verbose_name='Category')), + ('category', models.CharField(choices=[('S', 'System'), ('U', 'User')], default='U', max_length=128, + verbose_name='Category')), ('is_active', models.BooleanField(default=True, verbose_name='Is active')), ], options={ diff --git a/apps/assets/serializers/automations/base.py b/apps/assets/serializers/automations/base.py index 62ffc3542..b50cd5254 100644 --- a/apps/assets/serializers/automations/base.py +++ b/apps/assets/serializers/automations/base.py @@ -2,7 +2,7 @@ from django.utils.translation import gettext_lazy as _ from rest_framework import serializers from assets.models import Asset, Node, BaseAutomation, AutomationExecution -from common.const.choices import Trigger +from common.const.choices import Trigger, Status from common.serializers.fields import ObjectRelatedField, LabeledChoiceField from common.utils import get_logger from ops.mixin import PeriodTaskSerializerMixin @@ -36,24 +36,17 @@ class BaseAutomationSerializer(PeriodTaskSerializerMixin, BulkOrgResourceModelSe class AutomationExecutionSerializer(serializers.ModelSerializer): snapshot = serializers.SerializerMethodField(label=_('Automation snapshot')) - status = serializers.SerializerMethodField(label=_("Status")) trigger = LabeledChoiceField(choices=Trigger.choices, read_only=True, label=_("Trigger mode")) + status = LabeledChoiceField(choices=Status.choices, read_only=True, label=_('Status')) class Meta: model = AutomationExecution read_only_fields = [ - 'trigger', 'date_start', 'date_finished', 'snapshot', 'status', 'duration' + 'trigger', 'date_start', 'date_finished', + 'snapshot', 'status', 'duration' ] fields = ['id', 'automation'] + read_only_fields - @staticmethod - def get_status(obj): - from common.const import Status - status = Status._member_map_.get(obj.status) - if status is None: - return obj.status - return status.label - @staticmethod def get_snapshot(obj): from assets.const import AutomationTypes as AssetTypes diff --git a/apps/common/const/choices.py b/apps/common/const/choices.py index 8158f874f..69130a321 100644 --- a/apps/common/const/choices.py +++ b/apps/common/const/choices.py @@ -54,8 +54,8 @@ def get_country_phone_choices(): class Trigger(models.TextChoices): - manual = 'manual', _('Manual trigger') - timing = 'timing', _('Timing trigger') + manual = 'manual', _('Manual') + timing = 'timing', _('Timing') class Status(models.TextChoices): diff --git a/apps/i18n/core/en/LC_MESSAGES/django.po b/apps/i18n/core/en/LC_MESSAGES/django.po index e710c0366..707cf015b 100644 --- a/apps/i18n/core/en/LC_MESSAGES/django.po +++ b/apps/i18n/core/en/LC_MESSAGES/django.po @@ -4414,11 +4414,11 @@ msgid "China" msgstr "" #: common/const/choices.py:57 -msgid "Manual trigger" +msgid "Manual" msgstr "" #: common/const/choices.py:58 -msgid "Timing trigger" +msgid "Timing" msgstr "" #: common/const/choices.py:62 diff --git a/apps/i18n/core/ja/LC_MESSAGES/django.po b/apps/i18n/core/ja/LC_MESSAGES/django.po index 5402c293f..3c7382710 100644 --- a/apps/i18n/core/ja/LC_MESSAGES/django.po +++ b/apps/i18n/core/ja/LC_MESSAGES/django.po @@ -4566,11 +4566,11 @@ msgid "China" msgstr "中国" #: common/const/choices.py:57 -msgid "Manual trigger" +msgid "Manual" msgstr "手動トリガー" #: common/const/choices.py:58 -msgid "Timing trigger" +msgid "Timing" msgstr "タイミングトリガー" #: common/const/choices.py:62 diff --git a/apps/i18n/core/zh/LC_MESSAGES/django.po b/apps/i18n/core/zh/LC_MESSAGES/django.po index ce8ab1310..5652a6a33 100644 --- a/apps/i18n/core/zh/LC_MESSAGES/django.po +++ b/apps/i18n/core/zh/LC_MESSAGES/django.po @@ -4533,11 +4533,11 @@ msgid "China" msgstr "中国" #: common/const/choices.py:57 -msgid "Manual trigger" +msgid "Manual" msgstr "手动触发" #: common/const/choices.py:58 -msgid "Timing trigger" +msgid "Timing" msgstr "定时触发" #: common/const/choices.py:62 diff --git a/apps/i18n/core/zh_Hant/LC_MESSAGES/django.po b/apps/i18n/core/zh_Hant/LC_MESSAGES/django.po index 17c6b1505..1eadacc92 100644 --- a/apps/i18n/core/zh_Hant/LC_MESSAGES/django.po +++ b/apps/i18n/core/zh_Hant/LC_MESSAGES/django.po @@ -4508,11 +4508,11 @@ msgid "China" msgstr "中國" #: common/const/choices.py:57 -msgid "Manual trigger" +msgid "Manual" msgstr "手動觸發" #: common/const/choices.py:58 -msgid "Timing trigger" +msgid "Timing" msgstr "定時觸發" #: common/const/choices.py:62