Add custom fields to tags.

This commit is contained in:
Fabian Geisberger 2020-09-09 11:56:32 -04:00
parent 47a6fc19ca
commit 6d9abb9d29
5 changed files with 26 additions and 6 deletions

View File

@ -8,6 +8,7 @@ from dcim.api.nested_serializers import (
NestedRegionSerializer, NestedSiteSerializer,
)
from dcim.models import Device, DeviceRole, Platform, Rack, Region, Site
from extras.api.customfields import CustomFieldModelSerializer
from extras.choices import *
from extras.models import (
ConfigContext, ExportTemplate, Graph, ImageAttachment, ObjectChange, JobResult, Tag,
@ -88,13 +89,16 @@ class ExportTemplateSerializer(ValidatedModelSerializer):
# Tags
#
class TagSerializer(ValidatedModelSerializer):
class TagSerializer(CustomFieldModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:tag-detail')
tagged_items = serializers.IntegerField(read_only=True)
class Meta:
model = Tag
fields = ['id', 'url', 'name', 'slug', 'color', 'description', 'tagged_items']
fields = [
'id', 'url', 'name', 'slug', 'color', 'description', 'custom_fields',
'tagged_items',
]
class TaggedObjectSerializer(serializers.Serializer):

View File

@ -124,7 +124,7 @@ class ExportTemplateViewSet(ModelViewSet):
# Tags
#
class TagViewSet(ModelViewSet):
class TagViewSet(CustomFieldModelViewSet):
queryset = Tag.objects.annotate(
tagged_items=Count('extras_taggeditem_items')
).order_by(*Tag._meta.ordering)

View File

@ -152,7 +152,7 @@ class CustomFieldFilterForm(forms.Form):
# Tags
#
class TagForm(BootstrapMixin, forms.ModelForm):
class TagForm(BootstrapMixin, CustomFieldModelForm):
slug = SlugField()
class Meta:

View File

@ -1,8 +1,10 @@
from django.contrib.contenttypes.fields import GenericRelation
from django.db import models
from django.utils.text import slugify
from taggit.models import TagBase, GenericTaggedItemBase
from extras.models import ChangeLoggedModel
from extras.models import ChangeLoggedModel, CustomFieldModel
from extras.utils import extras_features
from utilities.choices import ColorChoices
from utilities.fields import ColorField
from utilities.querysets import RestrictedQuerySet
@ -12,7 +14,8 @@ from utilities.querysets import RestrictedQuerySet
# Tags
#
class Tag(TagBase, ChangeLoggedModel):
@extras_features('custom_fields')
class Tag(TagBase, ChangeLoggedModel, CustomFieldModel):
color = ColorField(
default=ColorChoices.COLOR_GREY
)
@ -20,6 +23,11 @@ class Tag(TagBase, ChangeLoggedModel):
max_length=200,
blank=True,
)
custom_field_values = GenericRelation(
to='extras.CustomFieldValue',
content_type_field='obj_type',
object_id_field='obj_id'
)
objects = RestrictedQuerySet.as_manager()

View File

@ -11,4 +11,12 @@
{% render_field form.description %}
</div>
</div>
{% if form.custom_fields %}
<div class="panel panel-default">
<div class="panel-heading"><strong>Custom Fields</strong></div>
<div class="panel-body">
{% render_custom_fields form %}
</div>
</div>
{% endif %}
{% endblock %}