Coverage for extras/api/serializers_/journaling.py: 77%
31 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
1from django.core.exceptions import ObjectDoesNotExist
2from rest_framework import serializers
4from core.models import ObjectType
5from extras.choices import *
6from extras.models import JournalEntry
7from netbox.api.fields import ChoiceField, ContentTypeField
8from netbox.api.gfk_fields import GFKSerializerField
9from netbox.api.serializers import NetBoxModelSerializer
10from users.models import User
12__all__ = (
13 'JournalEntrySerializer',
14)
17class JournalEntrySerializer(NetBoxModelSerializer):
18 assigned_object_type = ContentTypeField(
19 queryset=ObjectType.objects.all()
20 )
21 assigned_object = GFKSerializerField(read_only=True)
22 created_by = serializers.PrimaryKeyRelatedField(
23 allow_null=True,
24 queryset=User.objects.all(),
25 required=False,
26 default=serializers.CurrentUserDefault()
27 )
28 kind = ChoiceField(
29 choices=JournalEntryKindChoices,
30 required=False
31 )
33 class Meta:
34 model = JournalEntry
35 fields = [
36 'id', 'url', 'display_url', 'display', 'assigned_object_type', 'assigned_object_id', 'assigned_object',
37 'created', 'created_by', 'kind', 'comments', 'tags', 'custom_fields', 'last_updated',
38 ]
39 brief_fields = ('id', 'url', 'display', 'created')
41 def get_fields(self):
42 fields = super().get_fields()
44 # Make created_by field read-only if updating an existing JournalEntry.
45 if self.instance is not None:
46 fields['created_by'].read_only = True
48 return fields
50 def validate(self, data):
52 # Validate that the parent object exists
53 if not self.nested and 'assigned_object_type' in data and 'assigned_object_id' in data:
54 try:
55 data['assigned_object_type'].get_object_for_this_type(id=data['assigned_object_id'])
56 except ObjectDoesNotExist:
57 raise serializers.ValidationError(
58 f"Invalid assigned_object: {data['assigned_object_type']} ID {data['assigned_object_id']}"
59 )
61 return super().validate(data)