| from rest_framework import serializers | |
| from .models import ( | |
| Procedure, | |
| Fine, | |
| Office, | |
| Advisory, | |
| LegalSection, | |
| LegalDocument, | |
| IngestionJob, | |
| ) | |
| class ProcedureSerializer(serializers.ModelSerializer): | |
| class Meta: | |
| model = Procedure | |
| fields = "__all__" | |
| class FineSerializer(serializers.ModelSerializer): | |
| class Meta: | |
| model = Fine | |
| fields = "__all__" | |
| class OfficeSerializer(serializers.ModelSerializer): | |
| class Meta: | |
| model = Office | |
| fields = "__all__" | |
| class AdvisorySerializer(serializers.ModelSerializer): | |
| class Meta: | |
| model = Advisory | |
| fields = "__all__" | |
| class LegalDocumentSerializer(serializers.ModelSerializer): | |
| uploaded_file_url = serializers.SerializerMethodField() | |
| image_count = serializers.SerializerMethodField() | |
| class Meta: | |
| model = LegalDocument | |
| fields = "__all__" | |
| def get_uploaded_file_url(self, obj): | |
| if not obj.uploaded_file: | |
| return None | |
| try: | |
| url = obj.uploaded_file.url | |
| except ValueError: | |
| url = obj.uploaded_file.name | |
| request = self.context.get("request") | |
| if request: | |
| return request.build_absolute_uri(url) | |
| return url | |
| def get_image_count(self, obj): | |
| if hasattr(obj, "_prefetched_objects_cache") and "images" in obj._prefetched_objects_cache: | |
| return len(obj._prefetched_objects_cache["images"]) | |
| return obj.images.count() | |
| class LegalSectionSerializer(serializers.ModelSerializer): | |
| document = LegalDocumentSerializer(read_only=True) | |
| document_id = serializers.IntegerField(source="document.id", read_only=True) | |
| download_url = serializers.SerializerMethodField() | |
| class Meta: | |
| model = LegalSection | |
| fields = "__all__" | |
| def get_download_url(self, obj): | |
| request = self.context.get("request") | |
| if not obj.document: | |
| return None | |
| path = f"/api/legal-documents/{obj.document.id}/download/" | |
| if request: | |
| return request.build_absolute_uri(path) | |
| return path | |
| class IngestionJobSerializer(serializers.ModelSerializer): | |
| document = LegalDocumentSerializer(read_only=True) | |
| class Meta: | |
| model = IngestionJob | |
| fields = "__all__" | |