ChoiceField rewritten to improve functionality and customization