From 57a20be5c3f2c6880881b79cbb113796e04009c8 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 10 Nov 2022 12:51:15 +1100 Subject: [PATCH] Remove client-side length validation in form inputs (#3911) * Remove client-side length validation in form inputs - Let the server throw an error (so the user sees it) * Update instances of models.URLField to InvenTreeURLField --- InvenTree/InvenTree/fields.py | 6 ++-- InvenTree/InvenTree/serializers.py | 3 +- .../migrations/0050_alter_company_website.py | 19 ++++++++++++ InvenTree/company/models.py | 2 +- .../migrations/0075_auto_20221110_0108.py | 29 +++++++++++++++++++ InvenTree/order/models.py | 6 ++-- InvenTree/stock/models.py | 2 +- InvenTree/templates/js/translated/forms.js | 10 ------- 8 files changed, 57 insertions(+), 20 deletions(-) create mode 100644 InvenTree/company/migrations/0050_alter_company_website.py create mode 100644 InvenTree/order/migrations/0075_auto_20221110_0108.py diff --git a/InvenTree/InvenTree/fields.py b/InvenTree/InvenTree/fields.py index a5ec354bdb..b4df86e9e2 100644 --- a/InvenTree/InvenTree/fields.py +++ b/InvenTree/InvenTree/fields.py @@ -38,10 +38,8 @@ class InvenTreeURLField(models.URLField): def __init__(self, **kwargs): """Initialization method for InvenTreeURLField""" - # Max length for InvenTreeURLField defaults to 200 - if 'max_length' not in kwargs: - kwargs['max_length'] = 200 - + # Max length for InvenTreeURLField is set to 200 + kwargs['max_length'] = 200 super().__init__(**kwargs) diff --git a/InvenTree/InvenTree/serializers.py b/InvenTree/InvenTree/serializers.py index c97da05284..caa81f1e23 100644 --- a/InvenTree/InvenTree/serializers.py +++ b/InvenTree/InvenTree/serializers.py @@ -21,7 +21,7 @@ from rest_framework.serializers import DecimalField from rest_framework.utils import model_meta from common.models import InvenTreeSetting -from InvenTree.fields import InvenTreeRestURLField +from InvenTree.fields import InvenTreeRestURLField, InvenTreeURLField from InvenTree.helpers import download_image_from_url @@ -73,6 +73,7 @@ class InvenTreeModelSerializer(serializers.ModelSerializer): serializer_field_mapping = { **serializers.ModelSerializer.serializer_field_mapping, models.URLField: InvenTreeRestURLField, + InvenTreeURLField: InvenTreeRestURLField, } def __init__(self, instance=None, data=empty, **kwargs): diff --git a/InvenTree/company/migrations/0050_alter_company_website.py b/InvenTree/company/migrations/0050_alter_company_website.py new file mode 100644 index 0000000000..575d5fd164 --- /dev/null +++ b/InvenTree/company/migrations/0050_alter_company_website.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.16 on 2022-11-10 01:08 + +import InvenTree.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('company', '0049_company_metadata'), + ] + + operations = [ + migrations.AlterField( + model_name='company', + name='website', + field=InvenTree.fields.InvenTreeURLField(blank=True, help_text='Company website URL', verbose_name='Website'), + ), + ] diff --git a/InvenTree/company/models.py b/InvenTree/company/models.py index 1198a583b1..5a9a4e1e01 100644 --- a/InvenTree/company/models.py +++ b/InvenTree/company/models.py @@ -101,7 +101,7 @@ class Company(MetadataMixin, models.Model): blank=True, ) - website = models.URLField( + website = InvenTreeURLField( blank=True, verbose_name=_('Website'), help_text=_('Company website URL') diff --git a/InvenTree/order/migrations/0075_auto_20221110_0108.py b/InvenTree/order/migrations/0075_auto_20221110_0108.py new file mode 100644 index 0000000000..11a2737ff4 --- /dev/null +++ b/InvenTree/order/migrations/0075_auto_20221110_0108.py @@ -0,0 +1,29 @@ +# Generated by Django 3.2.16 on 2022-11-10 01:08 + +import InvenTree.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('order', '0074_auto_20220709_0108'), + ] + + operations = [ + migrations.AlterField( + model_name='purchaseorder', + name='link', + field=InvenTree.fields.InvenTreeURLField(blank=True, help_text='Link to external page', verbose_name='Link'), + ), + migrations.AlterField( + model_name='salesorder', + name='link', + field=InvenTree.fields.InvenTreeURLField(blank=True, help_text='Link to external page', verbose_name='Link'), + ), + migrations.AlterField( + model_name='salesordershipment', + name='link', + field=InvenTree.fields.InvenTreeURLField(blank=True, help_text='Link to external page', verbose_name='Link'), + ), + ] diff --git a/InvenTree/order/models.py b/InvenTree/order/models.py index d0af76c6dc..22faccf380 100644 --- a/InvenTree/order/models.py +++ b/InvenTree/order/models.py @@ -30,7 +30,7 @@ from common.settings import currency_code_default from company.models import Company, SupplierPart from InvenTree.exceptions import log_error from InvenTree.fields import (InvenTreeModelMoneyField, InvenTreeNotesField, - RoundingDecimalField) + InvenTreeURLField, RoundingDecimalField) from InvenTree.helpers import decimal2string, getSetting, notify_responsible from InvenTree.models import InvenTreeAttachment, ReferenceIndexingMixin from InvenTree.status_codes import (PurchaseOrderStatus, SalesOrderStatus, @@ -81,7 +81,7 @@ class Order(MetadataMixin, ReferenceIndexingMixin): description = models.CharField(max_length=250, verbose_name=_('Description'), help_text=_('Order description')) - link = models.URLField(blank=True, verbose_name=_('Link'), help_text=_('Link to external page')) + link = InvenTreeURLField(blank=True, verbose_name=_('Link'), help_text=_('Link to external page')) creation_date = models.DateField(blank=True, null=True, verbose_name=_('Creation Date')) @@ -1254,7 +1254,7 @@ class SalesOrderShipment(models.Model): help_text=_('Reference number for associated invoice'), ) - link = models.URLField( + link = InvenTreeURLField( blank=True, verbose_name=_('Link'), help_text=_('Link to external page') diff --git a/InvenTree/stock/models.py b/InvenTree/stock/models.py index cb8c80995a..aeae77fbb7 100644 --- a/InvenTree/stock/models.py +++ b/InvenTree/stock/models.py @@ -656,7 +656,7 @@ class StockItem(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel): link = InvenTreeURLField( verbose_name=_('External Link'), - blank=True, max_length=200, + blank=True, help_text=_("Link to external URL") ) diff --git a/InvenTree/templates/js/translated/forms.js b/InvenTree/templates/js/translated/forms.js index 9401c3ffc4..50f8d45914 100644 --- a/InvenTree/templates/js/translated/forms.js +++ b/InvenTree/templates/js/translated/forms.js @@ -2330,16 +2330,6 @@ function constructInputOptions(name, classes, type, parameters, options={}) { opts.push(`value='${parameters.default}'`); } - // Maximum input length - if (parameters.max_length != null) { - opts.push(`maxlength='${parameters.max_length}'`); - } - - // Minimum input length - if (parameters.min_length != null) { - opts.push(`minlength='${parameters.min_length}'`); - } - // Maximum value if (parameters.max_value != null) { opts.push(`max='${parameters.max_value}'`);