diff --git a/src/documents/admin.py b/src/documents/admin.py index 97871e4f8..d648d5829 100644 --- a/src/documents/admin.py +++ b/src/documents/admin.py @@ -3,6 +3,8 @@ from django.contrib import admin from guardian.admin import GuardedModelAdmin from documents.models import Correspondent +from documents.models import CustomField +from documents.models import CustomFieldInstance from documents.models import Document from documents.models import DocumentType from documents.models import Note @@ -144,6 +146,20 @@ class ShareLinksAdmin(GuardedModelAdmin): list_display_links = ("created",) +class CustomFieldsAdmin(GuardedModelAdmin): + fields = ("name", "created", "data_type") + readonly_fields = ("created", "data_type") + list_display = ("name", "created", "data_type") + list_filter = ("created", "data_type") + + +class CustomFieldInstancesAdmin(GuardedModelAdmin): + fields = ("field", "document", "created", "value") + readonly_fields = ("field", "document", "created", "value") + list_display = ("field", "document", "value", "created") + list_filter = ("document", "created") + + admin.site.register(Correspondent, CorrespondentAdmin) admin.site.register(Tag, TagAdmin) admin.site.register(DocumentType, DocumentTypeAdmin) @@ -153,6 +169,8 @@ admin.site.register(StoragePath, StoragePathAdmin) admin.site.register(PaperlessTask, TaskAdmin) admin.site.register(Note, NotesAdmin) admin.site.register(ShareLink, ShareLinksAdmin) +admin.site.register(CustomField, CustomFieldsAdmin) +admin.site.register(CustomFieldInstance, CustomFieldInstancesAdmin) if settings.AUDIT_LOG_ENABLED: diff --git a/src/documents/migrations/1040_customfield_customfieldboolean_customfielddate_and_more.py b/src/documents/migrations/1040_customfield_customfieldboolean_customfielddate_and_more.py index 90856740d..414b8b489 100644 --- a/src/documents/migrations/1040_customfield_customfieldboolean_customfielddate_and_more.py +++ b/src/documents/migrations/1040_customfield_customfieldboolean_customfielddate_and_more.py @@ -32,6 +32,7 @@ class Migration(migrations.Migration): db_index=True, default=django.utils.timezone.now, verbose_name="created", + editable=False, ), ), ("name", models.CharField(max_length=128)), @@ -47,6 +48,7 @@ class Migration(migrations.Migration): ], max_length=50, verbose_name="data type", + editable=False, ), ), ], @@ -71,6 +73,7 @@ class Migration(migrations.Migration): ( "created", models.DateTimeField( + editable=False, db_index=True, default=django.utils.timezone.now, verbose_name="created", @@ -79,6 +82,7 @@ class Migration(migrations.Migration): ( "document", models.ForeignKey( + editable=False, on_delete=django.db.models.deletion.CASCADE, related_name="custom_fields", to="documents.document", @@ -87,6 +91,7 @@ class Migration(migrations.Migration): ( "field", models.ForeignKey( + editable=False, on_delete=django.db.models.deletion.CASCADE, related_name="fields", to="documents.customfield", diff --git a/src/documents/models.py b/src/documents/models.py index 1cd8c959c..47586e060 100644 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -902,6 +902,7 @@ class CustomField(models.Model): _("created"), default=timezone.now, db_index=True, + editable=False, ) name = models.CharField(max_length=128) @@ -910,6 +911,7 @@ class CustomField(models.Model): _("data type"), max_length=50, choices=FieldDataType.choices, + editable=False, ) class Meta: @@ -937,6 +939,7 @@ class CustomFieldInstance(models.Model): _("created"), default=timezone.now, db_index=True, + editable=False, ) document = models.ForeignKey( @@ -945,6 +948,7 @@ class CustomFieldInstance(models.Model): null=False, on_delete=models.CASCADE, related_name="custom_fields", + editable=False, ) field = models.ForeignKey( @@ -953,6 +957,7 @@ class CustomFieldInstance(models.Model): null=False, on_delete=models.CASCADE, related_name="fields", + editable=False, ) class Meta: diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index cf20e86bd..450eacd11 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -398,6 +398,11 @@ class StoragePathField(serializers.PrimaryKeyRelatedField): class CustomFieldSerializer(serializers.ModelSerializer): + data_type = serializers.ChoiceField( + choices=CustomField.FieldDataType, + read_only=False, + ) + class Meta: model = CustomField fields = [