Skip to content

Commit b41e28c

Browse files
committed
Closes #14156: Add custom field support for contact assignments
1 parent f48f6a1 commit b41e28c

File tree

7 files changed

+35
-13
lines changed

7 files changed

+35
-13
lines changed

netbox/templates/tenancy/contactassignment_edit.html

+7
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,11 @@ <h5 class="offset-sm-3">{% trans "Contact Assignment" %}</h5>
2525
{% render_field form.priority %}
2626
{% render_field form.tags %}
2727
</div>
28+
29+
<div class="field-group mb-5">
30+
<div class="row mb-2">
31+
<h5 class="offset-sm-3">{% trans "Custom Fields" %}</h5>
32+
</div>
33+
{% render_custom_fields form %}
34+
</div>
2835
{% endblock %}

netbox/tenancy/api/serializers.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ class Meta:
105105
model = ContactAssignment
106106
fields = [
107107
'id', 'url', 'display', 'content_type', 'object_id', 'object', 'contact', 'role', 'priority', 'tags',
108-
'created', 'last_updated',
108+
'custom_fields', 'created', 'last_updated',
109109
]
110110

111111
@extend_schema_field(OpenApiTypes.OBJECT)

netbox/tenancy/filtersets.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@
33
from django.utils.translation import gettext as _
44

55
from extras.filters import TagFilter
6-
from netbox.filtersets import ChangeLoggedModelFilterSet, OrganizationalModelFilterSet, NetBoxModelFilterSet
6+
from netbox.filtersets import NetBoxModelFilterSet, OrganizationalModelFilterSet
77
from utilities.filters import ContentTypeFilter, TreeNodeMultipleChoiceFilter
88
from .models import *
99

10-
1110
__all__ = (
1211
'ContactAssignmentFilterSet',
1312
'ContactFilterSet',
@@ -81,7 +80,7 @@ def search(self, queryset, name, value):
8180
)
8281

8382

84-
class ContactAssignmentFilterSet(ChangeLoggedModelFilterSet):
83+
class ContactAssignmentFilterSet(NetBoxModelFilterSet):
8584
q = django_filters.CharFilter(
8685
method='search',
8786
label=_('Search'),

netbox/tenancy/forms/model_forms.py

+2-5
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
from django import forms
22
from django.utils.translation import gettext_lazy as _
33

4-
from extras.forms.mixins import TagsMixin
5-
from extras.models import Tag
64
from netbox.forms import NetBoxModelForm
75
from tenancy.models import *
8-
from utilities.forms.mixins import BootstrapMixin
9-
from utilities.forms.fields import CommentField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, SlugField
6+
from utilities.forms.fields import CommentField, DynamicModelChoiceField, SlugField
107

118
__all__ = (
129
'ContactAssignmentForm',
@@ -122,7 +119,7 @@ class Meta:
122119
}
123120

124121

125-
class ContactAssignmentForm(BootstrapMixin, TagsMixin, forms.ModelForm):
122+
class ContactAssignmentForm(NetBoxModelForm):
126123
group = DynamicModelChoiceField(
127124
label=_('Group'),
128125
queryset=ContactGroup.objects.all(),

netbox/tenancy/graphql/types.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import graphene
22

3-
from extras.graphql.mixins import TagsMixin
3+
from extras.graphql.mixins import CustomFieldsMixin, TagsMixin
44
from tenancy import filtersets, models
55
from netbox.graphql.types import BaseObjectType, OrganizationalObjectType, NetBoxObjectType
66

@@ -69,7 +69,7 @@ class Meta:
6969
filterset_class = filtersets.ContactGroupFilterSet
7070

7171

72-
class ContactAssignmentType(TagsMixin, BaseObjectType):
72+
class ContactAssignmentType(CustomFieldsMixin, TagsMixin, BaseObjectType):
7373

7474
class Meta:
7575
model = models.ContactAssignment
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 4.2.6 on 2023-11-06 20:23
2+
3+
from django.db import migrations, models
4+
import utilities.json
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('tenancy', '0011_contactassignment_tags'),
11+
]
12+
13+
operations = [
14+
migrations.AddField(
15+
model_name='contactassignment',
16+
name='custom_field_data',
17+
field=models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder),
18+
),
19+
]

netbox/tenancy/models/contacts.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from django.utils.translation import gettext_lazy as _
66

77
from netbox.models import ChangeLoggedModel, NestedGroupModel, OrganizationalModel, PrimaryModel
8-
from netbox.models.features import TagsMixin
8+
from netbox.models.features import CustomFieldsMixin, TagsMixin
99
from tenancy.choices import *
1010

1111
__all__ = (
@@ -109,7 +109,7 @@ def get_absolute_url(self):
109109
return reverse('tenancy:contact', args=[self.pk])
110110

111111

112-
class ContactAssignment(ChangeLoggedModel, TagsMixin):
112+
class ContactAssignment(CustomFieldsMixin, TagsMixin, ChangeLoggedModel):
113113
content_type = models.ForeignKey(
114114
to=ContentType,
115115
on_delete=models.CASCADE

0 commit comments

Comments
 (0)