Вы можете использовать forms.MultiValueField
и forms.MultiWidget
. MultiValueField
знает, что одно поле вашей модели содержит несколько дискретных значений, а виджет MultiWidget
знает, как должно быть представлено каждое дискретное значение. Они будут обрабатывать создание уникальных имен для ваших полей, чтобы они могли реконструировать форму из значений POST
, и вам не придется переопределять любые методы формы, обеспечивающие реализацию, т.е. вам не придется переопределять save()
.
Как видите, официальные документы по этой теме немного тонкие. Я предлагаю вам взглянуть на код, чтобы выяснить, как все подключено и что вызывается, когда ваши требования всегда будут нуждаться в уникальном решении, а именно: сколько электронных писем будет содержать поле? Точно два, так что я могу указать два CharField
виджета вручную, или это будет между 0-2, поэтому мне нужно динамически конструировать все в зависимости от переданного значения? Если вам нужен хороший пример в качестве начальной ссылки, посмотрите этот вопрос SO , в котором содержится простая и понятная реализация.
В идеале вам нужно иметь PipedEmailAddressesField
, который расширяет CharField
, в качестве поля вашей модели, которое знает, что оно хранит адреса электронной почты. Он должен иметь возможность создавать свое собственное соответствующее поле формы MultiValueField
, которое, в свою очередь, должно создавать свое собственное соответствующее поле MultiWidget
.