@ -1,4 +1,4 @@
|
||||
# Generated by Django 5.0.7 on 2024-07-21 00:05
|
||||
# Generated by Django 5.0.7 on 2024-07-21 01:45
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
@ -37,6 +37,8 @@ class ServiceForm(CommonModelForm):
|
||||
|
||||
cleaned_data = super().clean()
|
||||
|
||||
pk = self.instance.id
|
||||
dependent_service = cleaned_data.get("dependent_service")
|
||||
device = cleaned_data.get("device")
|
||||
cluster = cleaned_data.get("cluster")
|
||||
is_template = cleaned_data.get("is_template")
|
||||
@ -60,6 +62,19 @@ class ServiceForm(CommonModelForm):
|
||||
|
||||
raise ValidationError('Port(s) must be assigned to a service.')
|
||||
|
||||
if dependent_service:
|
||||
|
||||
for dependency in dependent_service:
|
||||
|
||||
query = Service.objects.filter(
|
||||
dependent_service = pk,
|
||||
id = dependency.id,
|
||||
)
|
||||
|
||||
if query.exists():
|
||||
|
||||
raise ValidationError('A dependent service already depends upon this service. Circular dependencies are not allowed.')
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Generated by Django 5.0.7 on 2024-07-21 00:05
|
||||
# Generated by Django 5.0.7 on 2024-07-21 01:45
|
||||
|
||||
import access.fields
|
||||
import access.models
|
||||
@ -86,7 +86,7 @@ class Migration(migrations.Migration):
|
||||
('created', access.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False)),
|
||||
('modified', access.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False)),
|
||||
('cluster', models.ForeignKey(blank=True, default=None, help_text='Cluster the service is assigned to', null=True, on_delete=django.db.models.deletion.CASCADE, to='itim.cluster', verbose_name='Cluster')),
|
||||
('dependent_service', models.ManyToManyField(blank=True, default=None, help_text='Services that this service depends upon', to='itim.service', verbose_name='Dependent Services')),
|
||||
('dependent_service', models.ManyToManyField(blank=True, default=None, help_text='Services that this service depends upon', related_name='dependentservice', to='itim.service', verbose_name='Dependent Services')),
|
||||
('device', models.ForeignKey(blank=True, default=None, help_text='Device the service is assigned to', null=True, on_delete=django.db.models.deletion.CASCADE, to='itam.device', verbose_name='Device')),
|
||||
('organization', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='access.organization', validators=[access.models.TenancyObject.validatate_organization_exists])),
|
||||
('port', models.ManyToManyField(blank=True, help_text='Port the service is available on', to='itim.port', verbose_name='Port')),
|
||||
|
@ -166,6 +166,8 @@ class Service(TenancyObject):
|
||||
blank = True,
|
||||
default = None,
|
||||
help_text = 'Services that this service depends upon',
|
||||
related_name = 'dependentservice',
|
||||
symmetrical = False,
|
||||
verbose_name = 'Dependent Services',
|
||||
)
|
||||
|
||||
|
@ -205,7 +205,7 @@
|
||||
{% if item.dependent_service.all %}
|
||||
{% for service in item.dependent_service.all %}
|
||||
<tr>
|
||||
<td><a href="{% url 'Settings:_port_view' item.pk %}">{{ service }}</a></td>
|
||||
<td><a href="{% url 'ITIM:_service_view' service.pk %}">{{ service }}</a></td>
|
||||
<td>{{ service.organization }}</td>
|
||||
</tr>
|
||||
{% endfor%}
|
||||
|
Reference in New Issue
Block a user