mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-22 15:36:44 -06:00
8356 action_object_type cleanup migration
This commit is contained in:
parent
a679740626
commit
73047c979b
@ -254,7 +254,7 @@ class EventRuleForm(NetBoxModelForm):
|
|||||||
(_('EventRule'), ('name', 'content_types', 'enabled', 'tags')),
|
(_('EventRule'), ('name', 'content_types', 'enabled', 'tags')),
|
||||||
(_('Events'), ('type_create', 'type_update', 'type_delete', 'type_job_start', 'type_job_end')),
|
(_('Events'), ('type_create', 'type_update', 'type_delete', 'type_job_start', 'type_job_end')),
|
||||||
(_('Conditions'), ('conditions',)),
|
(_('Conditions'), ('conditions',)),
|
||||||
(_('Action'), ('action_type', 'action_choice', 'parameters')),
|
(_('Action'), ('action_type', 'action_choice', 'parameters', 'action_object_type', 'action_object_id', 'action_object_identifier')),
|
||||||
)
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
@ -270,6 +270,9 @@ class EventRuleForm(NetBoxModelForm):
|
|||||||
widgets = {
|
widgets = {
|
||||||
'conditions': forms.Textarea(attrs={'class': 'font-monospace'}),
|
'conditions': forms.Textarea(attrs={'class': 'font-monospace'}),
|
||||||
'action_type': HTMXSelect(),
|
'action_type': HTMXSelect(),
|
||||||
|
'action_object_type': forms.HiddenInput,
|
||||||
|
'action_object_id': forms.HiddenInput,
|
||||||
|
'action_object_identifier': forms.HiddenInput,
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_script_choices(self):
|
def get_script_choices(self):
|
||||||
@ -278,13 +281,14 @@ class EventRuleForm(NetBoxModelForm):
|
|||||||
for module in ScriptModule.objects.all():
|
for module in ScriptModule.objects.all():
|
||||||
scripts = []
|
scripts = []
|
||||||
for script_name in module.scripts.keys():
|
for script_name in module.scripts.keys():
|
||||||
name = f"{str(module).lower()}:{script_name.lower()}"
|
name = f"{str(module.pk)}:{script_name.lower()}"
|
||||||
scripts.append((name, script_name))
|
scripts.append((name, script_name))
|
||||||
|
|
||||||
if scripts:
|
if scripts:
|
||||||
choices.append((str(module), scripts))
|
choices.append((str(module), scripts))
|
||||||
|
|
||||||
self.fields['action_choice'].choices = choices
|
self.fields['action_choice'].choices = choices
|
||||||
|
self.fields['action_choice'].initial = get_field_value(self, 'action_object_identifier')
|
||||||
|
|
||||||
def get_webhook_choices(self):
|
def get_webhook_choices(self):
|
||||||
self.fields['action_choice'] = DynamicModelChoiceField(
|
self.fields['action_choice'] = DynamicModelChoiceField(
|
||||||
|
@ -26,8 +26,8 @@ def move_webhooks(apps, schema_editor):
|
|||||||
event.conditions = webhook.conditions
|
event.conditions = webhook.conditions
|
||||||
|
|
||||||
event.action_type = EventRuleActionChoices.WEBHOOK
|
event.action_type = EventRuleActionChoices.WEBHOOK
|
||||||
event.object_type_id = ContentType.objects.get_for_model(webhook).id
|
event.action_object_type_id = ContentType.objects.get_for_model(webhook).id
|
||||||
event.object_id = webhook.id
|
event.action_object_id = webhook.id
|
||||||
event.save()
|
event.save()
|
||||||
event.content_types.add(*webhook.content_types.all())
|
event.content_types.add(*webhook.content_types.all())
|
||||||
|
|
||||||
@ -58,7 +58,7 @@ class Migration(migrations.Migration):
|
|||||||
('enabled', models.BooleanField(default=True)),
|
('enabled', models.BooleanField(default=True)),
|
||||||
('conditions', models.JSONField(blank=True, null=True)),
|
('conditions', models.JSONField(blank=True, null=True)),
|
||||||
('action_type', models.CharField(default='webhook', max_length=30)),
|
('action_type', models.CharField(default='webhook', max_length=30)),
|
||||||
('object_id', models.PositiveBigIntegerField(blank=True, null=True)),
|
('action_object_id', models.PositiveBigIntegerField(blank=True, null=True)),
|
||||||
(
|
(
|
||||||
'content_types',
|
'content_types',
|
||||||
models.ManyToManyField(
|
models.ManyToManyField(
|
||||||
@ -68,15 +68,14 @@ class Migration(migrations.Migration):
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
'object_type',
|
'action_object_type',
|
||||||
models.ForeignKey(
|
models.ForeignKey(
|
||||||
limit_choices_to=models.Q(('app_label', 'extras'), ('model__in', ('webhook', 'script'))),
|
|
||||||
on_delete=django.db.models.deletion.CASCADE,
|
on_delete=django.db.models.deletion.CASCADE,
|
||||||
related_name='eventrule_actions',
|
related_name='eventrule_actions',
|
||||||
to='contenttypes.contenttype',
|
to='contenttypes.contenttype',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
('object_identifier', models.CharField(max_length=80, blank=True)),
|
('action_object_identifier', models.CharField(max_length=80, blank=True)),
|
||||||
('parameters', models.JSONField(blank=True, null=True)),
|
('parameters', models.JSONField(blank=True, null=True)),
|
||||||
('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')),
|
('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')),
|
||||||
],
|
],
|
||||||
@ -123,13 +122,4 @@ class Migration(migrations.Migration):
|
|||||||
model_name='webhook',
|
model_name='webhook',
|
||||||
name='type_update',
|
name='type_update',
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
|
||||||
model_name='eventrule',
|
|
||||||
name='object_type',
|
|
||||||
field=models.ForeignKey(
|
|
||||||
on_delete=django.db.models.deletion.CASCADE,
|
|
||||||
related_name='eventrule_actions',
|
|
||||||
to='contenttypes.contenttype',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
]
|
]
|
||||||
|
@ -100,22 +100,22 @@ class EventRule(CustomFieldsMixin, ExportTemplatesMixin, TagsMixin, ChangeLogged
|
|||||||
default=EventRuleActionChoices.WEBHOOK,
|
default=EventRuleActionChoices.WEBHOOK,
|
||||||
verbose_name=_('event type')
|
verbose_name=_('event type')
|
||||||
)
|
)
|
||||||
object_type = models.ForeignKey(
|
action_object_type = models.ForeignKey(
|
||||||
to=ContentType,
|
to=ContentType,
|
||||||
related_name='eventrule_actions',
|
related_name='eventrule_actions',
|
||||||
on_delete=models.CASCADE,
|
on_delete=models.CASCADE,
|
||||||
)
|
)
|
||||||
object_id = models.PositiveBigIntegerField(
|
action_object_id = models.PositiveBigIntegerField(
|
||||||
blank=True,
|
blank=True,
|
||||||
null=True
|
null=True
|
||||||
)
|
)
|
||||||
object = GenericForeignKey(
|
action_object = GenericForeignKey(
|
||||||
ct_field='object_type',
|
ct_field='action_object_type',
|
||||||
fk_field='object_id',
|
fk_field='action_object_id',
|
||||||
)
|
)
|
||||||
|
|
||||||
# internal (not show in UI) - used by scripts to store function name
|
# internal (not show in UI) - used by scripts to store function name
|
||||||
object_identifier = models.CharField(
|
action_object_identifier = models.CharField(
|
||||||
max_length=80,
|
max_length=80,
|
||||||
blank=True
|
blank=True
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user