7
from django import forms

class SignUpForm(forms.Form):
    birth_day = forms.ChoiceField(choices=range(1,32))

我收到“渲染时捕获 TypeError:'int' 对象不可迭代”。 https://docs.djangoproject.com/en/dev/ref/models/fields/#field-choices表示选择参数采用列表或元组等可迭代对象。

http://docs.python.org/library/functions.html#range说 range() 创建一个列表。

为什么我会收到错误消息?

我尝试使用 map() 将列表转换为 str 但收到不同的错误。

4

2 回答 2

18

... 表示选择参数采用可迭代对象,例如列表或元组。

不,它说它需要一个可迭代的 2-tuples

2 元组的可迭代(例如,列表或元组)用作该字段的选择。

birth_day = forms.ChoiceField(choices=((str(x), x) for x in range(1,32)))
于 2011-11-06T05:38:06.007 回答
0

你需要2个元组。对相同的 2 个元组使用 zip 内置函数

from django import forms


class SignUpForm(forms.Form):

    birth_day = models.IntegerField(choices=list(zip(range(1, 32), range(1, 32))), unique=True)

记住 (1,32) 将创建从 1 到 31 !

于 2017-11-17T06:43:41.920 回答