I recently needed to add a form field that had a preset list of dropdown options. The last option was Other and when selected, a new text field would appear to so you could fill in an additional option.
I added an additional CharField to my model to store the data.
then in the form processing logic I check to see if the value of the field is "other" and if it is I replace other with the value of the extra field. Here, I'm calling form.save(commit=False) to obtain the data from the form without committing it to the database. Then I'm adjusting the value of the fields based on post-processing logic, before saving the form to the database.
You can also add validation logic or raise a ValidationError if you need to require a value for that field.