Răsfoiți Sursa

Closes #14156: Add custom field support for contact assignments

Jeremy Stretch 2 ani în urmă
părinte
comite
2562c8745c

+ 7 - 0
netbox/templates/tenancy/contactassignment_edit.html

@@ -25,4 +25,11 @@
     {% render_field form.priority %}
     {% render_field form.tags %}
   </div>
+
+  <div class="field-group mb-5">
+    <div class="row mb-2">
+      <h5 class="offset-sm-3">{% trans "Custom Fields" %}</h5>
+    </div>
+    {% render_custom_fields form %}
+  </div>
 {% endblock %}

+ 1 - 1
netbox/tenancy/api/serializers.py

@@ -105,7 +105,7 @@ class ContactAssignmentSerializer(NetBoxModelSerializer):
         model = ContactAssignment
         fields = [
             'id', 'url', 'display', 'content_type', 'object_id', 'object', 'contact', 'role', 'priority', 'tags',
-            'created', 'last_updated',
+            'custom_fields', 'created', 'last_updated',
         ]
 
     @extend_schema_field(OpenApiTypes.OBJECT)

+ 2 - 3
netbox/tenancy/filtersets.py

@@ -3,11 +3,10 @@ from django.db.models import Q
 from django.utils.translation import gettext as _
 
 from extras.filters import TagFilter
-from netbox.filtersets import ChangeLoggedModelFilterSet, OrganizationalModelFilterSet, NetBoxModelFilterSet
+from netbox.filtersets import NetBoxModelFilterSet, OrganizationalModelFilterSet
 from utilities.filters import ContentTypeFilter, TreeNodeMultipleChoiceFilter
 from .models import *
 
-
 __all__ = (
     'ContactAssignmentFilterSet',
     'ContactFilterSet',
@@ -81,7 +80,7 @@ class ContactFilterSet(NetBoxModelFilterSet):
         )
 
 
-class ContactAssignmentFilterSet(ChangeLoggedModelFilterSet):
+class ContactAssignmentFilterSet(NetBoxModelFilterSet):
     q = django_filters.CharFilter(
         method='search',
         label=_('Search'),

+ 2 - 5
netbox/tenancy/forms/model_forms.py

@@ -1,12 +1,9 @@
 from django import forms
 from django.utils.translation import gettext_lazy as _
 
-from extras.forms.mixins import TagsMixin
-from extras.models import Tag
 from netbox.forms import NetBoxModelForm
 from tenancy.models import *
-from utilities.forms.mixins import BootstrapMixin
-from utilities.forms.fields import CommentField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, SlugField
+from utilities.forms.fields import CommentField, DynamicModelChoiceField, SlugField
 
 __all__ = (
     'ContactAssignmentForm',
@@ -122,7 +119,7 @@ class ContactForm(NetBoxModelForm):
         }
 
 
-class ContactAssignmentForm(BootstrapMixin, TagsMixin, forms.ModelForm):
+class ContactAssignmentForm(NetBoxModelForm):
     group = DynamicModelChoiceField(
         label=_('Group'),
         queryset=ContactGroup.objects.all(),

+ 2 - 2
netbox/tenancy/graphql/types.py

@@ -1,6 +1,6 @@
 import graphene
 
-from extras.graphql.mixins import TagsMixin
+from extras.graphql.mixins import CustomFieldsMixin, TagsMixin
 from tenancy import filtersets, models
 from netbox.graphql.types import BaseObjectType, OrganizationalObjectType, NetBoxObjectType
 
@@ -69,7 +69,7 @@ class ContactGroupType(OrganizationalObjectType):
         filterset_class = filtersets.ContactGroupFilterSet
 
 
-class ContactAssignmentType(TagsMixin, BaseObjectType):
+class ContactAssignmentType(CustomFieldsMixin, TagsMixin, BaseObjectType):
 
     class Meta:
         model = models.ContactAssignment

+ 19 - 0
netbox/tenancy/migrations/0012_contactassignment_custom_fields.py

@@ -0,0 +1,19 @@
+# Generated by Django 4.2.6 on 2023-11-06 20:23
+
+from django.db import migrations, models
+import utilities.json
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('tenancy', '0011_contactassignment_tags'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='contactassignment',
+            name='custom_field_data',
+            field=models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder),
+        ),
+    ]

+ 2 - 2
netbox/tenancy/models/contacts.py

@@ -5,7 +5,7 @@ from django.urls import reverse
 from django.utils.translation import gettext_lazy as _
 
 from netbox.models import ChangeLoggedModel, NestedGroupModel, OrganizationalModel, PrimaryModel
-from netbox.models.features import TagsMixin
+from netbox.models.features import CustomFieldsMixin, TagsMixin
 from tenancy.choices import *
 
 __all__ = (
@@ -109,7 +109,7 @@ class Contact(PrimaryModel):
         return reverse('tenancy:contact', args=[self.pk])
 
 
-class ContactAssignment(ChangeLoggedModel, TagsMixin):
+class ContactAssignment(CustomFieldsMixin, TagsMixin, ChangeLoggedModel):
     content_type = models.ForeignKey(
         to=ContentType,
         on_delete=models.CASCADE