Populate a table that should have an X amount of rows with default values with a big insert query? Or can it done somehow by default?
you can use generate_series() for that:

insert into field (textfield, idcal)
select '', c.idcal
from calendar c
where idcal = 42
  cross join generate_series(1, c.numberoffields) as g(f)