diff --git a/src/pretix/api/serializers/item.py b/src/pretix/api/serializers/item.py index 027d43d786..a1c22d6838 100644 --- a/src/pretix/api/serializers/item.py +++ b/src/pretix/api/serializers/item.py @@ -184,6 +184,8 @@ class ItemSerializer(I18nAwareModelSerializer): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + self.fields['default_price'].allow_null = False + self.fields['default_price'].required = True if not self.read_only: self.fields['require_membership_types'].queryset = self.context['event'].organizer.membership_types.all() self.fields['grant_membership_type'].queryset = self.context['event'].organizer.membership_types.all() diff --git a/src/tests/api/test_items.py b/src/tests/api/test_items.py index cd3432958d..d040cf6fb9 100644 --- a/src/tests/api/test_items.py +++ b/src/tests/api/test_items.py @@ -476,6 +476,39 @@ def test_item_create(token_client, organizer, event, item, category, taxrule, me assert Item.objects.get(pk=resp.data['id']).require_membership_types.count() == 1 +@pytest.mark.django_db +def test_item_create_price_required(token_client, organizer, event, item, category, taxrule): + resp = token_client.post( + '/api/v1/organizers/{}/events/{}/items/'.format(organizer.slug, event.slug), + { + "category": category.pk, + "name": { + "en": "Ticket" + }, + "active": True, + "description": None, + }, + format='json' + ) + assert resp.status_code == 400 + assert resp.data == {"default_price": ["This field is required."]} + resp = token_client.post( + '/api/v1/organizers/{}/events/{}/items/'.format(organizer.slug, event.slug), + { + "category": category.pk, + "name": { + "en": "Ticket" + }, + "active": True, + "description": None, + "default_price": None, + }, + format='json' + ) + assert resp.status_code == 400 + assert resp.data == {"default_price": ["This field may not be null."]} + + @pytest.mark.django_db def test_item_create_with_variation(token_client, organizer, event, item, category, taxrule): resp = token_client.post(