Should I be using a foreign key?

Bottom line, this really doesn’t make any sense to me.

If a person can enter in any arbitrary value, what’s the purpose of having a foreign key?

Is there ancillary data associated with a species besides just the name?

Let’s say you enter Oka instead of Oak. Are you then able to add ancillary information associated with an Oka? Now, if I come along later and also enter Oka, do I see the ancillary data that you entered? If not, am I able to enter that data myself? If so, what happens to the data you entered?

Now, leaving all that aside…

More accurately, an FK-based selection list is limited by the queryset defined for that field.

If I were doing this, I’d separate the logic of the select box / text entry Form Field from the Model. Set up a text / select box as a form field, then when the form is posted, do whatever work you want to do with what was entered.