我正在使用表单框架,我正在使用javascript魔法将一些值动态注入选择框(此选择框的值依赖于另一个值)。
基本上你有团队和玩家。您需要定义一个玩家,但玩家数据来自一个团队。
在我的表格课程中我有
team = forms.ModelChoiceField(queryset=Team.objects.all()
player = forms.ChoiceField()
在用户从选择框中选择一个团队的前端,(空)播放器框可以使用新数据正确更新。但是当我点击提交时,播放器选择框会抛出错误Select a valid choice. 2 is not one of the available choices.
2是一个有效的选择。
这有什么办法吗?我可以使ChoiceField()取任何值吗?
答案 0 :(得分:3)
按复杂性DESC命令:
choices = Player.objects.values_list('id', flat=True)
CharField
,但在模板中手动将其呈现为选择框。答案 1 :(得分:2)
您可以将字段定义为带表单的CharField。选择作为窗口小部件。这样,该字段将呈现为空的select元素,并将接受任何值。
player = forms.CharField(widget=forms.Select)
如果您使用Select2并通过ajax加载值,这将非常有用。
答案 2 :(得分:0)
您可以创建自己的ChoiceField,例如从ChoiceField扩展的DynamicChoiceField。然后,您可以覆盖“clean”方法,不进行任何验证,就像使用常规ChoiceField一样。
class DynamicChoiceField(forms.ChoiceField):
def clean(self, value):
// Do whatever validation needs to happen
在表单中,您可以使用DynamicChoiceField而不是ChoiceField