From 70e4b023704f8e8d586c7ec7487bc38438b3f219 Mon Sep 17 00:00:00 2001 From: Richard Schreiber Date: Wed, 23 Feb 2022 09:48:45 +0100 Subject: [PATCH] Fix #2452 -- Disallow invalid values in min_per_order/max_per_order (#2453) --- src/pretix/base/models/items.py | 4 +++- src/pretix/control/forms/item.py | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/pretix/base/models/items.py b/src/pretix/base/models/items.py index 5c8aeb773..ff1f071ce 100644 --- a/src/pretix/base/models/items.py +++ b/src/pretix/base/models/items.py @@ -44,7 +44,7 @@ import dateutil.parser import pytz from django.conf import settings from django.core.exceptions import ValidationError -from django.core.validators import RegexValidator +from django.core.validators import MinValueValidator, RegexValidator from django.db import models from django.db.models import Q from django.utils import formats @@ -479,12 +479,14 @@ class Item(LoggedModel): min_per_order = models.IntegerField( verbose_name=_('Minimum amount per order'), null=True, blank=True, + validators=[MinValueValidator(0)], help_text=_('This product can only be bought if it is added to the cart at least this many times. If you keep ' 'the field empty or set it to 0, there is no special limit for this product.') ) max_per_order = models.IntegerField( verbose_name=_('Maximum amount per order'), null=True, blank=True, + validators=[MinValueValidator(0)], help_text=_('This product can only be bought at most this many times within one order. If you keep the field ' 'empty or set it to 0, there is no special limit for this product. The limit for the maximum ' 'number of items in the whole order applies regardless.') diff --git a/src/pretix/control/forms/item.py b/src/pretix/control/forms/item.py index d08b51692..c2886da39 100644 --- a/src/pretix/control/forms/item.py +++ b/src/pretix/control/forms/item.py @@ -627,7 +627,9 @@ class ItemUpdateForm(I18nModelForm): 'class': 'scrolling-multiple-choice' }), 'generate_tickets': TicketNullBooleanSelect(), - 'show_quota_left': ShowQuotaNullBooleanSelect() + 'show_quota_left': ShowQuotaNullBooleanSelect(), + 'max_per_order': forms.widgets.NumberInput(attrs={'min': 0}), + 'min_per_order': forms.widgets.NumberInput(attrs={'min': 0}), }