return match
-class CorrespondentSerializer(MatchingModelSerializer):
+class OwnedObjectSerializer(serializers.ModelSerializer):
+ def __init__(self, *args, **kwargs):
+ self.user = kwargs.pop("user", None)
+ return super().__init__(*args, **kwargs)
+
+ def create(self, validated_data):
+ if self.user and validated_data["owner"] is None:
+ validated_data["owner"] = self.user
+ return super().create(validated_data)
+
+
+class CorrespondentSerializer(MatchingModelSerializer, OwnedObjectSerializer):
last_correspondence = serializers.DateTimeField(read_only=True)
"is_insensitive",
"document_count",
"last_correspondence",
+ "owner",
)
-class DocumentTypeSerializer(MatchingModelSerializer):
+class DocumentTypeSerializer(MatchingModelSerializer, OwnedObjectSerializer):
class Meta:
model = DocumentType
fields = (
"matching_algorithm",
"is_insensitive",
"document_count",
+ "owner",
)
"is_insensitive",
"is_inbox_tag",
"document_count",
+ "owner",
)
-class TagSerializer(MatchingModelSerializer):
+class TagSerializer(MatchingModelSerializer, OwnedObjectSerializer):
def get_text_color(self, obj):
try:
h = obj.color.lstrip("#")
return StoragePath.objects.all()
-class DocumentSerializer(DynamicFieldsModelSerializer):
+class DocumentSerializer(DynamicFieldsModelSerializer, OwnedObjectSerializer):
correspondent = CorrespondentField(allow_null=True)
tags = TagsField(many=True)
"archive_serial_number",
"original_file_name",
"archived_file_name",
+ "owner",
)
fields = ["rule_type", "value"]
-class SavedViewSerializer(serializers.ModelSerializer):
+class SavedViewSerializer(OwnedObjectSerializer):
filter_rules = SavedViewFilterRuleSerializer(many=True)
"sort_field",
"sort_reverse",
"filter_rules",
+ "owner",
]
def update(self, instance, validated_data):
}[compression]
-class StoragePathSerializer(MatchingModelSerializer):
+class StoragePathSerializer(MatchingModelSerializer, OwnedObjectSerializer):
class Meta:
model = StoragePath
fields = (
"matching_algorithm",
"is_insensitive",
"document_count",
+ "owner",
)
def validate_path(self, path):
from rest_framework.filters import OrderingFilter
from rest_framework.filters import SearchFilter
from rest_framework.generics import GenericAPIView
+from rest_framework.mixins import CreateModelMixin
from rest_framework.mixins import DestroyModelMixin
from rest_framework.mixins import ListModelMixin
from rest_framework.mixins import RetrieveModelMixin
return context
-class CorrespondentViewSet(ModelViewSet):
+class PassUserMixin(CreateModelMixin):
+ """
+ Pass a user object to serializer
+ """
+
+ def get_serializer(self, *args, **kwargs):
+ kwargs.setdefault("user", self.request.user)
+ return super().get_serializer(*args, **kwargs)
+
+
+class CorrespondentViewSet(ModelViewSet, PassUserMixin):
model = Correspondent
queryset = Correspondent.objects.annotate(
)
-class TagViewSet(ModelViewSet):
+class TagViewSet(ModelViewSet, PassUserMixin):
model = Tag
queryset = Tag.objects.annotate(document_count=Count("documents")).order_by(
ordering_fields = ("name", "matching_algorithm", "match", "document_count")
-class DocumentTypeViewSet(ModelViewSet):
+class DocumentTypeViewSet(ModelViewSet, PassUserMixin):
model = DocumentType
queryset = DocumentType.objects.annotate(
DestroyModelMixin,
ListModelMixin,
GenericViewSet,
+ PassUserMixin,
):
model = Document
queryset = Document.objects.all()
return Response(self.log_files)
-class SavedViewViewSet(ModelViewSet):
+class SavedViewViewSet(ModelViewSet, PassUserMixin):
model = SavedView
queryset = SavedView.objects.all()
)
-class StoragePathViewSet(ModelViewSet):
+class StoragePathViewSet(ModelViewSet, PassUserMixin):
model = StoragePath
queryset = StoragePath.objects.annotate(document_count=Count("documents")).order_by(