1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Closes #14156: Add custom field support for contact assignments

This commit is contained in:
Jeremy Stretch
2023-11-06 15:36:59 -05:00
parent ac91d4e5e5
commit 2562c8745c
7 changed files with 35 additions and 13 deletions

View File

@ -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 %}

View File

@ -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)

View File

@ -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'),

View File

@ -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(),

View File

@ -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

View File

@ -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),
),
]

View File

@ -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