From a47c1b98c43afdcc63ece929eeb01cfb42680efc Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 12 Nov 2024 23:32:26 -0800 Subject: [PATCH] Make 16 char string --- src/documents/filters.py | 2 +- ...057_alter_customfieldinstance_value_select.py | 7 +++---- src/documents/models.py | 2 +- src/documents/serialisers.py | 16 ++++++++++------ 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/documents/filters.py b/src/documents/filters.py index 246f1ee35..c06a44e78 100644 --- a/src/documents/filters.py +++ b/src/documents/filters.py @@ -198,7 +198,7 @@ class CustomFieldsFilter(Filter): class SelectField(serializers.CharField): def __init__(self, custom_field: CustomField): self._options = custom_field.extra_data["select_options"] - super().__init__(max_length=128) + super().__init__(max_length=16) def to_internal_value(self, data): # Test if the supplied value is not an id diff --git a/src/documents/migrations/1057_alter_customfieldinstance_value_select.py b/src/documents/migrations/1057_alter_customfieldinstance_value_select.py index aa1555b5a..473e1af78 100644 --- a/src/documents/migrations/1057_alter_customfieldinstance_value_select.py +++ b/src/documents/migrations/1057_alter_customfieldinstance_value_select.py @@ -1,10 +1,9 @@ # Generated by Django 5.1.1 on 2024-11-13 05:14 -import uuid - from django.db import migrations from django.db import models from django.db import transaction +from django.utils.crypto import get_random_string def migrate_customfield_selects(apps, schema_editor): @@ -20,7 +19,7 @@ def migrate_customfield_selects(apps, schema_editor): if custom_field.data_type == "select": # CustomField.FieldDataType.SELECT old_select_options = custom_field.extra_data["select_options"] custom_field.extra_data["select_options"] = [ - {"id": str(uuid.uuid4()), "label": value} + {"id": get_random_string(16), "label": value} for value in old_select_options ] custom_field.save() @@ -70,7 +69,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="customfieldinstance", name="value_select", - field=models.CharField(max_length=128, null=True), + field=models.CharField(max_length=16, null=True), ), migrations.RunPython( migrate_customfield_selects, diff --git a/src/documents/models.py b/src/documents/models.py index 99e1ab447..ab99d496a 100644 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -947,7 +947,7 @@ class CustomFieldInstance(SoftDeleteModel): value_document_ids = models.JSONField(null=True) - value_select = models.CharField(null=True, max_length=128) + value_select = models.CharField(null=True, max_length=16) class Meta: ordering = ("created",) diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index 90f568e5b..887cdaf23 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -533,7 +533,8 @@ class CustomFieldSerializer(serializers.ModelSerializer): if ( "data_type" in attrs and attrs["data_type"] == CustomField.FieldDataType.SELECT - and ( + ): + if ( "extra_data" not in attrs or "select_options" not in attrs["extra_data"] or not isinstance(attrs["extra_data"]["select_options"], list) @@ -542,11 +543,14 @@ class CustomFieldSerializer(serializers.ModelSerializer): len(option.get("label", "")) > 0 for option in attrs["extra_data"]["select_options"] ) - ) - ): - raise serializers.ValidationError( - {"error": "extra_data.select_options must be a valid list"}, - ) + ): + raise serializers.ValidationError( + {"error": "extra_data.select_options must be a valid list"}, + ) + # labels are valid, generate ids if not present + for option in attrs["extra_data"]["select_options"]: + if "id" not in option or option["id"] is None: + option["id"] = get_random_string(length=16) elif ( "data_type" in attrs and attrs["data_type"] == CustomField.FieldDataType.MONETARY