Django Form ChoiceField range(): 'int' object not iterable
-
22-02-2021 - |
Question
from django import forms
class SignUpForm(forms.Form):
birth_day = forms.ChoiceField(choices=range(1,32))
I'm getting "Caught TypeError while rendering: 'int' object is not iterable". https://docs.djangoproject.com/en/dev/ref/models/fields/#field-choices says the choices argument takes iterables such as a list or tuple.
http://docs.python.org/library/functions.html#range says range() creates a list.
Why am I getting an error?
I tried converting the list to str using map() but received different errors.
Solution
... says the choices argument takes iterables such as a list or tuple.
No, it says it takes an iterable of 2-tuples.
An iterable (e.g., a list or tuple) of 2-tuples to use as choices for this field.
birth_day = forms.ChoiceField(choices=((str(x), x) for x in range(1,32)))
OTHER TIPS
You need 2 tuples. Use zip built-in function for the same 2 tuples
from django import forms
class SignUpForm(forms.Form):
birth_day = models.IntegerField(choices=list(zip(range(1, 32), range(1, 32))), unique=True)
Remember (1,32) will create from 1 to 31 !
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow