What is ChoiceField in Django Forms?

Django is an open-source, high-level Python web framework that encourages rapid development and clean, pragmatic design.

ChoiceField in Django Forms is a string field for selecting a particular choice out of a list of available choices. ChoiceField can be used in cases where there are a limited number of pre-defined options to select from, e.g., selecting a country from a list of countries or a day from among the seven days of the week.

ChoiceField is similar to an option field in web pages, where someone can select an option of their choice from a list of options.

ChoiceField uses an iterable of a 2-tuple to add as choices.

Code

A basic implementation of a ChoiceField is shown below:

class FRUIT(forms.Form):
CHOICES = (
(1, 'Orange'),
(2, 'Mango'),
(3, 'Strawberries'),
(4, 'Grapes'),
)
name = forms.CharField()
category = forms.ChoiceField(choices=CHOICES)

In the code above, the fruit names are the choices that can be chosen from.

A complete demonstration of how the choices would be part of the application is provided below.

Let’s start with installation:

pip install pipenv
pipenv shell
pipenv install django

Then:

django-admin startproject DjangoChoiceField ./
python manage.py startapp codebase
python manage.py migrate
python manage.py runserver

Next, add the code below to settings.py.

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'codebase'
]

In the codebase app folder, go to forms.py and use ChoiceField to make the options for the form.

from django import forms
#The choices to choose from
DEPARTMENTS =(
( "BCH","biochemistry"),
( "EE","electrical engineering"),
( "BTC", "biotechnology"),
("MCB","microbiology"),
( "BIO","biology"),
( "CE", "chemical engineering"),
( "OPT", "Optometry"),
( "SE", "software engineering"),
( "PUT", "public Health"),
("STA", "statistics" ),
)
# creating a form
class ChoiceForm(forms.Form):
departments = forms.ChoiceField(choices = DEPARTMENTS)

In views.py, a view for the web page itself is created as follows.

from django.shortcuts import render
from .forms import ChoiceForm
# Create your views here.
def home(request):
form = ChoiceForm()
context = {
'form': form
}
return render( request,"app/home.html", context)

In the codebase app, create a folder and name it “templates.” Inside the “templates” folder, create another folder and name it “app.” Then, inside the “app” folder, create the home.html file, which displays a web page that contains the form and a button to submit it.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<br>
Different FUTO departments
<br><br>
<form method = "GET">
{{ form }}
<input type = "submit" value = "Submit">
</form>
</body>
</html>

In the “DjangoChoiceField” folder, the following is added to urls.py.

from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
# including the codebase urls.py file
path('', include('codebase.urls'))
]

In the codebase folder, create a file and name it urls.py with the content below to route the web pages across the application.

from django.urls import path
#import the home function from the views.py file
from .views import home
urlpatterns = [
#creating a route
path('', home, name='home'),
]

Finally, to run the application and interact with the form, run the following commands:

python manage.py makemigrations

python manage.py migrate
python manage.py runserver

The result can be viewed on the localhost http://127.0.0.1:8000 to access the app.

Free Resources