mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-11-04 03:27:12 -05:00 
			
		
		
		
	Object creation with owner
This commit is contained in:
		
							parent
							
								
									fad13c148e
								
							
						
					
					
						commit
						2554ced198
					
				@ -74,7 +74,18 @@ class MatchingModelSerializer(serializers.ModelSerializer):
 | 
				
			|||||||
        return match
 | 
					        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)
 | 
					    last_correspondence = serializers.DateTimeField(read_only=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -89,10 +100,11 @@ class CorrespondentSerializer(MatchingModelSerializer):
 | 
				
			|||||||
            "is_insensitive",
 | 
					            "is_insensitive",
 | 
				
			||||||
            "document_count",
 | 
					            "document_count",
 | 
				
			||||||
            "last_correspondence",
 | 
					            "last_correspondence",
 | 
				
			||||||
 | 
					            "owner",
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class DocumentTypeSerializer(MatchingModelSerializer):
 | 
					class DocumentTypeSerializer(MatchingModelSerializer, OwnedObjectSerializer):
 | 
				
			||||||
    class Meta:
 | 
					    class Meta:
 | 
				
			||||||
        model = DocumentType
 | 
					        model = DocumentType
 | 
				
			||||||
        fields = (
 | 
					        fields = (
 | 
				
			||||||
@ -103,6 +115,7 @@ class DocumentTypeSerializer(MatchingModelSerializer):
 | 
				
			|||||||
            "matching_algorithm",
 | 
					            "matching_algorithm",
 | 
				
			||||||
            "is_insensitive",
 | 
					            "is_insensitive",
 | 
				
			||||||
            "document_count",
 | 
					            "document_count",
 | 
				
			||||||
 | 
					            "owner",
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -153,10 +166,11 @@ class TagSerializerVersion1(MatchingModelSerializer):
 | 
				
			|||||||
            "is_insensitive",
 | 
					            "is_insensitive",
 | 
				
			||||||
            "is_inbox_tag",
 | 
					            "is_inbox_tag",
 | 
				
			||||||
            "document_count",
 | 
					            "document_count",
 | 
				
			||||||
 | 
					            "owner",
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TagSerializer(MatchingModelSerializer):
 | 
					class TagSerializer(MatchingModelSerializer, OwnedObjectSerializer):
 | 
				
			||||||
    def get_text_color(self, obj):
 | 
					    def get_text_color(self, obj):
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            h = obj.color.lstrip("#")
 | 
					            h = obj.color.lstrip("#")
 | 
				
			||||||
@ -214,7 +228,7 @@ class StoragePathField(serializers.PrimaryKeyRelatedField):
 | 
				
			|||||||
        return StoragePath.objects.all()
 | 
					        return StoragePath.objects.all()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class DocumentSerializer(DynamicFieldsModelSerializer):
 | 
					class DocumentSerializer(DynamicFieldsModelSerializer, OwnedObjectSerializer):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    correspondent = CorrespondentField(allow_null=True)
 | 
					    correspondent = CorrespondentField(allow_null=True)
 | 
				
			||||||
    tags = TagsField(many=True)
 | 
					    tags = TagsField(many=True)
 | 
				
			||||||
@ -265,6 +279,7 @@ class DocumentSerializer(DynamicFieldsModelSerializer):
 | 
				
			|||||||
            "archive_serial_number",
 | 
					            "archive_serial_number",
 | 
				
			||||||
            "original_file_name",
 | 
					            "original_file_name",
 | 
				
			||||||
            "archived_file_name",
 | 
					            "archived_file_name",
 | 
				
			||||||
 | 
					            "owner",
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -274,7 +289,7 @@ class SavedViewFilterRuleSerializer(serializers.ModelSerializer):
 | 
				
			|||||||
        fields = ["rule_type", "value"]
 | 
					        fields = ["rule_type", "value"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class SavedViewSerializer(serializers.ModelSerializer):
 | 
					class SavedViewSerializer(OwnedObjectSerializer):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    filter_rules = SavedViewFilterRuleSerializer(many=True)
 | 
					    filter_rules = SavedViewFilterRuleSerializer(many=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -289,6 +304,7 @@ class SavedViewSerializer(serializers.ModelSerializer):
 | 
				
			|||||||
            "sort_field",
 | 
					            "sort_field",
 | 
				
			||||||
            "sort_reverse",
 | 
					            "sort_reverse",
 | 
				
			||||||
            "filter_rules",
 | 
					            "filter_rules",
 | 
				
			||||||
 | 
					            "owner",
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def update(self, instance, validated_data):
 | 
					    def update(self, instance, validated_data):
 | 
				
			||||||
@ -562,7 +578,7 @@ class BulkDownloadSerializer(DocumentListSerializer):
 | 
				
			|||||||
        }[compression]
 | 
					        }[compression]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class StoragePathSerializer(MatchingModelSerializer):
 | 
					class StoragePathSerializer(MatchingModelSerializer, OwnedObjectSerializer):
 | 
				
			||||||
    class Meta:
 | 
					    class Meta:
 | 
				
			||||||
        model = StoragePath
 | 
					        model = StoragePath
 | 
				
			||||||
        fields = (
 | 
					        fields = (
 | 
				
			||||||
@ -574,6 +590,7 @@ class StoragePathSerializer(MatchingModelSerializer):
 | 
				
			|||||||
            "matching_algorithm",
 | 
					            "matching_algorithm",
 | 
				
			||||||
            "is_insensitive",
 | 
					            "is_insensitive",
 | 
				
			||||||
            "document_count",
 | 
					            "document_count",
 | 
				
			||||||
 | 
					            "owner",
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def validate_path(self, path):
 | 
					    def validate_path(self, path):
 | 
				
			||||||
 | 
				
			|||||||
@ -42,6 +42,7 @@ from rest_framework.exceptions import NotFound
 | 
				
			|||||||
from rest_framework.filters import OrderingFilter
 | 
					from rest_framework.filters import OrderingFilter
 | 
				
			||||||
from rest_framework.filters import SearchFilter
 | 
					from rest_framework.filters import SearchFilter
 | 
				
			||||||
from rest_framework.generics import GenericAPIView
 | 
					from rest_framework.generics import GenericAPIView
 | 
				
			||||||
 | 
					from rest_framework.mixins import CreateModelMixin
 | 
				
			||||||
from rest_framework.mixins import DestroyModelMixin
 | 
					from rest_framework.mixins import DestroyModelMixin
 | 
				
			||||||
from rest_framework.mixins import ListModelMixin
 | 
					from rest_framework.mixins import ListModelMixin
 | 
				
			||||||
from rest_framework.mixins import RetrieveModelMixin
 | 
					from rest_framework.mixins import RetrieveModelMixin
 | 
				
			||||||
@ -137,7 +138,17 @@ class IndexView(TemplateView):
 | 
				
			|||||||
        return context
 | 
					        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
 | 
					    model = Correspondent
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    queryset = Correspondent.objects.annotate(
 | 
					    queryset = Correspondent.objects.annotate(
 | 
				
			||||||
@ -163,7 +174,7 @@ class CorrespondentViewSet(ModelViewSet):
 | 
				
			|||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TagViewSet(ModelViewSet):
 | 
					class TagViewSet(ModelViewSet, PassUserMixin):
 | 
				
			||||||
    model = Tag
 | 
					    model = Tag
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    queryset = Tag.objects.annotate(document_count=Count("documents")).order_by(
 | 
					    queryset = Tag.objects.annotate(document_count=Count("documents")).order_by(
 | 
				
			||||||
@ -183,7 +194,7 @@ class TagViewSet(ModelViewSet):
 | 
				
			|||||||
    ordering_fields = ("name", "matching_algorithm", "match", "document_count")
 | 
					    ordering_fields = ("name", "matching_algorithm", "match", "document_count")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class DocumentTypeViewSet(ModelViewSet):
 | 
					class DocumentTypeViewSet(ModelViewSet, PassUserMixin):
 | 
				
			||||||
    model = DocumentType
 | 
					    model = DocumentType
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    queryset = DocumentType.objects.annotate(
 | 
					    queryset = DocumentType.objects.annotate(
 | 
				
			||||||
@ -204,6 +215,7 @@ class DocumentViewSet(
 | 
				
			|||||||
    DestroyModelMixin,
 | 
					    DestroyModelMixin,
 | 
				
			||||||
    ListModelMixin,
 | 
					    ListModelMixin,
 | 
				
			||||||
    GenericViewSet,
 | 
					    GenericViewSet,
 | 
				
			||||||
 | 
					    PassUserMixin,
 | 
				
			||||||
):
 | 
					):
 | 
				
			||||||
    model = Document
 | 
					    model = Document
 | 
				
			||||||
    queryset = Document.objects.all()
 | 
					    queryset = Document.objects.all()
 | 
				
			||||||
@ -551,7 +563,7 @@ class LogViewSet(ViewSet):
 | 
				
			|||||||
        return Response(self.log_files)
 | 
					        return Response(self.log_files)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class SavedViewViewSet(ModelViewSet):
 | 
					class SavedViewViewSet(ModelViewSet, PassUserMixin):
 | 
				
			||||||
    model = SavedView
 | 
					    model = SavedView
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    queryset = SavedView.objects.all()
 | 
					    queryset = SavedView.objects.all()
 | 
				
			||||||
@ -824,7 +836,7 @@ class RemoteVersionView(GenericAPIView):
 | 
				
			|||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class StoragePathViewSet(ModelViewSet):
 | 
					class StoragePathViewSet(ModelViewSet, PassUserMixin):
 | 
				
			||||||
    model = StoragePath
 | 
					    model = StoragePath
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    queryset = StoragePath.objects.annotate(document_count=Count("documents")).order_by(
 | 
					    queryset = StoragePath.objects.annotate(document_count=Count("documents")).order_by(
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user