Django 非常奇怪地生成表单的下拉列表
Django generates form's dropdown very oddly
我有这个带有选项的下拉菜单,它的选项是基于枚举的,表单是在 admin 上生成的,但是其中 2 个选项有一个奇怪的值并且用括号括起来,我一直在使用这样的下拉菜单,它是第一次发生这种情况,知道为什么会这样吗?谢谢
我的枚举:
class ProjectPublicState(object):
OPEN_FOR_APPLICATIONS = 1
IN_PROGRESS = 2
CLOSED = 3,
NOT_PUBLIC = 4,
@classmethod
def default(cls):
return cls.OPEN_FOR_APPLICATIONS
在我的模型中:
PUBLIC_STATE_CHOICES = (
(ProjectPublicState.OPEN_FOR_APPLICATIONS, _('Open for Applications')),
(ProjectPublicState.IN_PROGRESS, _('In Progress')),
(ProjectPublicState.CLOSED, _('Closed')),
(ProjectPublicState.NOT_PUBLIC, _('Not Public')),
)
并且(将其更改为 models.IntegerField 也没有解决)
state_public = FSMIntegerField(
_('Public State'),
choices=PUBLIC_STATE_CHOICES,
default=ProjectPublicState.default()
)
结果:
<select name="state_public" id="id_state_public" class="form-control">
<option selected="selected" value="1">Open for Applications</option>
<option value="2">In Progress</option>
<option value="(3,)">Closed</option>
<option value="(4,)">Not Public</option>
</select>
这是因为你不小心把变量CLOSED
和NOT_PUBLIC
转换成了tuples
,在末尾加了一个逗号。
根据 Python tuples:
上的文档
A tuple consists of a number of values separated by commas.
您应该删除末尾的逗号,它应该可以正常工作。
class ProjectPublicState(object):
OPEN_FOR_APPLICATIONS = 1
IN_PROGRESS = 2
CLOSED = 3 # remove the trailing comma
NOT_PUBLIC = 4 # remove the trailing comma
@classmethod
def default(cls):
return cls.OPEN_FOR_APPLICATIONS
例如:
In [1]: foo = 1, # assign 'foo' as 1 with a trailing comma at the end
In [2]: foo # print foo
Out[2]: (1,) # a tuple and not just a number
In [3]: foo = 1,2,3 # Now assign multiple values separated by commas
In [4]: foo
Out[4]: (1, 2, 3) # tuple of 3 elements
我有这个带有选项的下拉菜单,它的选项是基于枚举的,表单是在 admin 上生成的,但是其中 2 个选项有一个奇怪的值并且用括号括起来,我一直在使用这样的下拉菜单,它是第一次发生这种情况,知道为什么会这样吗?谢谢
我的枚举:
class ProjectPublicState(object):
OPEN_FOR_APPLICATIONS = 1
IN_PROGRESS = 2
CLOSED = 3,
NOT_PUBLIC = 4,
@classmethod
def default(cls):
return cls.OPEN_FOR_APPLICATIONS
在我的模型中:
PUBLIC_STATE_CHOICES = (
(ProjectPublicState.OPEN_FOR_APPLICATIONS, _('Open for Applications')),
(ProjectPublicState.IN_PROGRESS, _('In Progress')),
(ProjectPublicState.CLOSED, _('Closed')),
(ProjectPublicState.NOT_PUBLIC, _('Not Public')),
)
并且(将其更改为 models.IntegerField 也没有解决)
state_public = FSMIntegerField(
_('Public State'),
choices=PUBLIC_STATE_CHOICES,
default=ProjectPublicState.default()
)
结果:
<select name="state_public" id="id_state_public" class="form-control">
<option selected="selected" value="1">Open for Applications</option>
<option value="2">In Progress</option>
<option value="(3,)">Closed</option>
<option value="(4,)">Not Public</option>
</select>
这是因为你不小心把变量CLOSED
和NOT_PUBLIC
转换成了tuples
,在末尾加了一个逗号。
根据 Python tuples:
上的文档A tuple consists of a number of values separated by commas.
您应该删除末尾的逗号,它应该可以正常工作。
class ProjectPublicState(object):
OPEN_FOR_APPLICATIONS = 1
IN_PROGRESS = 2
CLOSED = 3 # remove the trailing comma
NOT_PUBLIC = 4 # remove the trailing comma
@classmethod
def default(cls):
return cls.OPEN_FOR_APPLICATIONS
例如:
In [1]: foo = 1, # assign 'foo' as 1 with a trailing comma at the end
In [2]: foo # print foo
Out[2]: (1,) # a tuple and not just a number
In [3]: foo = 1,2,3 # Now assign multiple values separated by commas
In [4]: foo
Out[4]: (1, 2, 3) # tuple of 3 elements