from documents.models import Document
from documents.models import DocumentType
from documents.models import MatchingModel
+from documents.models import Note
from documents.models import PaperlessTask
from documents.models import SavedView
from documents.models import SavedViewFilterRule
]
+class BasicUserSerializer(serializers.ModelSerializer):
+ # Different than paperless.serializers.UserSerializer
+ class Meta:
+ model = User
+ fields = ["id", "username", "first_name", "last_name"]
+
+
+class NotesSerializer(serializers.ModelSerializer):
+ user = BasicUserSerializer()
+
+ class Meta:
+ model = Note
+ fields = ["id", "note", "created", "user"]
+ ordering = ["-created"]
+
+
class DocumentSerializer(
OwnedObjectSerializer,
NestedUpdateMixin,
created_date = serializers.DateField(required=False)
page_count = SerializerMethodField()
+ notes = NotesSerializer(many=True, required=False)
+
custom_fields = CustomFieldInstanceSerializer(
many=True,
allow_null=False,
GIVEN:
- A document with a single note
WHEN:
+ - API request for document
- API request for document notes is made
THEN:
+ - Note is included in the document response
- The associated note is returned
"""
doc = Document.objects.create(
user=self.user,
)
+ response = self.client.get(
+ f"/api/documents/{doc.pk}/",
+ format="json",
+ )
+
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+
+ resp_data = response.json()
+ self.assertEqual(len(resp_data["notes"]), 1)
+ self.assertEqual(resp_data["notes"][0]["note"], note.note)
+ self.assertEqual(resp_data["notes"][0]["user"]["username"], self.user.username)
+
response = self.client.get(
f"/api/documents/{doc.pk}/notes/",
format="json",
except (FileNotFoundError, Document.DoesNotExist):
raise Http404
- def getNotes(self, doc):
- return [
- {
- "id": c.pk,
- "note": c.note,
- "created": c.created,
- "user": {
- "id": c.user.id,
- "username": c.user.username,
- "first_name": c.user.first_name,
- "last_name": c.user.last_name,
- },
- }
- for c in Note.objects.select_related("user")
- .only(
- "pk",
- "note",
- "created",
- "user__id",
- "user__username",
- "user__first_name",
- "user__last_name",
- )
- .filter(document=doc)
- .order_by("-created")
- ]
-
@action(
methods=["get", "post", "delete"],
detail=True,
except Document.DoesNotExist:
raise Http404
+ serializer = self.get_serializer(doc)
+
if request.method == "GET":
try:
- notes = self.getNotes(doc)
+ notes = serializer.to_representation(doc).get("notes")
return Response(notes)
except Exception as e:
logger.warning(f"An error occurred retrieving notes: {e!s}")
index.add_or_update_document(doc)
- notes = self.getNotes(doc)
+ notes = serializer.to_representation(doc).get("notes")
return Response(notes)
except Exception as e:
index.add_or_update_document(doc)
- return Response(self.getNotes(doc))
+ notes = serializer.to_representation(doc).get("notes")
+
+ return Response(notes)
return Response(
{