@@ -55,19 +55,23 @@ class ComponentCreateForm(forms.Form):
5555 def clean (self ):
5656 super ().clean ()
5757
58- # Validate that all replication fields generate an equal number of values
58+ # Validate that all replication fields generate an equal number of values (or a single value)
5959 if not (patterns := self .cleaned_data .get (self .replication_fields [0 ])):
6060 return
61-
6261 pattern_count = len (patterns )
6362 for field_name in self .replication_fields :
6463 value_count = len (self .cleaned_data [field_name ])
65- if self .cleaned_data [field_name ] and value_count != pattern_count :
66- raise forms .ValidationError ({
67- field_name : _ (
68- "The provided pattern specifies {value_count} values, but {pattern_count} are expected."
69- ).format (value_count = value_count , pattern_count = pattern_count )
70- }, code = 'label_pattern_mismatch' )
64+ if self .cleaned_data [field_name ]:
65+ if value_count == 1 :
66+ # If the field resolves to a single value (because no pattern was used), multiply it by the number
67+ # of expected values. This allows us to reuse the same label when creating multiple components.
68+ self .cleaned_data [field_name ] = self .cleaned_data [field_name ] * pattern_count
69+ elif value_count != pattern_count :
70+ raise forms .ValidationError ({
71+ field_name : _ (
72+ "The provided pattern specifies {value_count} values, but {pattern_count} are expected."
73+ ).format (value_count = value_count , pattern_count = pattern_count )
74+ }, code = 'label_pattern_mismatch' )
7175
7276
7377#
0 commit comments