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.priority %}
{% render_field form.tags %} {% render_field form.tags %}
</div> </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 %} {% endblock %}

View File

@ -105,7 +105,7 @@ class ContactAssignmentSerializer(NetBoxModelSerializer):
model = ContactAssignment model = ContactAssignment
fields = [ fields = [
'id', 'url', 'display', 'content_type', 'object_id', 'object', 'contact', 'role', 'priority', 'tags', '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) @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 django.utils.translation import gettext as _
from extras.filters import TagFilter 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 utilities.filters import ContentTypeFilter, TreeNodeMultipleChoiceFilter
from .models import * from .models import *
__all__ = ( __all__ = (
'ContactAssignmentFilterSet', 'ContactAssignmentFilterSet',
'ContactFilterSet', 'ContactFilterSet',
@ -81,7 +80,7 @@ class ContactFilterSet(NetBoxModelFilterSet):
) )
class ContactAssignmentFilterSet(ChangeLoggedModelFilterSet): class ContactAssignmentFilterSet(NetBoxModelFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
label=_('Search'), label=_('Search'),

View File

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

View File

@ -1,6 +1,6 @@
import graphene import graphene
from extras.graphql.mixins import TagsMixin from extras.graphql.mixins import CustomFieldsMixin, TagsMixin
from tenancy import filtersets, models from tenancy import filtersets, models
from netbox.graphql.types import BaseObjectType, OrganizationalObjectType, NetBoxObjectType from netbox.graphql.types import BaseObjectType, OrganizationalObjectType, NetBoxObjectType
@ -69,7 +69,7 @@ class ContactGroupType(OrganizationalObjectType):
filterset_class = filtersets.ContactGroupFilterSet filterset_class = filtersets.ContactGroupFilterSet
class ContactAssignmentType(TagsMixin, BaseObjectType): class ContactAssignmentType(CustomFieldsMixin, TagsMixin, BaseObjectType):
class Meta: class Meta:
model = models.ContactAssignment 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 django.utils.translation import gettext_lazy as _
from netbox.models import ChangeLoggedModel, NestedGroupModel, OrganizationalModel, PrimaryModel 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 * from tenancy.choices import *
__all__ = ( __all__ = (
@ -109,7 +109,7 @@ class Contact(PrimaryModel):
return reverse('tenancy:contact', args=[self.pk]) return reverse('tenancy:contact', args=[self.pk])
class ContactAssignment(ChangeLoggedModel, TagsMixin): class ContactAssignment(CustomFieldsMixin, TagsMixin, ChangeLoggedModel):
content_type = models.ForeignKey( content_type = models.ForeignKey(
to=ContentType, to=ContentType,
on_delete=models.CASCADE on_delete=models.CASCADE