diff --git a/src/pretix/api/serializers/item.py b/src/pretix/api/serializers/item.py index a2c6258f5e..aa0d9f651c 100644 --- a/src/pretix/api/serializers/item.py +++ b/src/pretix/api/serializers/item.py @@ -222,7 +222,7 @@ class ItemBundleSerializer(serializers.ModelSerializer): class ItemProgramTimeSerializer(serializers.ModelSerializer): class Meta: model = ItemProgramTime - fields = ('id', 'start', 'end') + fields = ('id', 'start', 'end', 'location') def validate(self, data): data = super().validate(data) diff --git a/src/pretix/base/migrations/0297_itemprogramtime_location.py b/src/pretix/base/migrations/0297_itemprogramtime_location.py new file mode 100644 index 0000000000..d6eb1f2864 --- /dev/null +++ b/src/pretix/base/migrations/0297_itemprogramtime_location.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.27 on 2026-01-21 12:06 + +from django.db import migrations, models +import i18nfield.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ("pretixbase", "0296_invoice_invoice_from_state"), + ] + + operations = [ + migrations.AddField( + model_name="itemprogramtime", + name="location", + field=i18nfield.fields.I18nTextField(max_length=200, null=True), + ) + ] diff --git a/src/pretix/base/models/items.py b/src/pretix/base/models/items.py index 339ad45014..feb7dec8a5 100644 --- a/src/pretix/base/models/items.py +++ b/src/pretix/base/models/items.py @@ -2306,10 +2306,17 @@ class ItemProgramTime(models.Model): :type start: datetime :param end: The date and time this program time ends :type end: datetime + :param location: venue + :type location: str """ item = models.ForeignKey('Item', related_name='program_times', on_delete=models.CASCADE) start = models.DateTimeField(verbose_name=_("Start")) end = models.DateTimeField(verbose_name=_("End")) + location = I18nTextField( + null=True, blank=True, + max_length=200, + verbose_name=_("Location"), + ) def clean(self): if hasattr(self, 'item') and self.item and self.item.event.has_subevents: diff --git a/src/pretix/control/forms/item.py b/src/pretix/control/forms/item.py index 6d5b8f1797..93d5839fc1 100644 --- a/src/pretix/control/forms/item.py +++ b/src/pretix/control/forms/item.py @@ -1354,6 +1354,10 @@ class ItemProgramTimeForm(I18nModelForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['end'].widget.attrs['data-date-after'] = '#id_{prefix}-start_0'.format(prefix=self.prefix) + self.fields['location'].widget.attrs['rows'] = '1' + self.fields['location'].widget.attrs['placeholder'] = _( + 'Sample Conference Center, Heidelberg, Germany' + ) class Meta: model = ItemProgramTime @@ -1361,6 +1365,7 @@ class ItemProgramTimeForm(I18nModelForm): fields = [ 'start', 'end', + 'location' ] field_classes = { 'start': forms.SplitDateTimeField, diff --git a/src/pretix/control/templates/pretixcontrol/item/include_program_times.html b/src/pretix/control/templates/pretixcontrol/item/include_program_times.html index e223a0eecb..9939cbf4fd 100644 --- a/src/pretix/control/templates/pretixcontrol/item/include_program_times.html +++ b/src/pretix/control/templates/pretixcontrol/item/include_program_times.html @@ -34,6 +34,7 @@ {% bootstrap_form_errors form %} {% bootstrap_field form.start layout="control" %} {% bootstrap_field form.end layout="control" %} + {% bootstrap_field form.location layout="control" %} {% endfor %} @@ -59,6 +60,7 @@