我的管理网站中有一个表单,用户可以从下拉列表中选择特定模型中的单个对象。
thing_choices = [(x.id, x) for x in Things.objects.all()]
class ThingSelector(forms.Form):
thing = forms.ChoiceField(choices=thing_choices)
如果我首先添加一个新的Thing对象,然后转到带有选择器表单的页面,我发现该对象没有出现在下拉列表中。这可能是当我第一次站起来服务器时,表单中填充了选项。测试证明了这一点,因为如果我重新启动Django,新的选择将出现在列表中。
我如何解决这个问题,以便我可以创建对象并将它们显示在此表单上?
(更多信息:所选的东西随表单一起提交,以便在其上进行处理。)
...谢谢
答案 0 :(得分:1)
如果我首先添加一个新的Thing对象,然后转到带有选择器表单的页面,我发现该对象没有出现在下拉列表中。这可能是当我第一次站起来服务器时,表单中填充了选项。
正确,变量thing_choices
是在您的代码首次运行时计算的,如果它与您的表单处于相同的范围,则不太可能再次运行。
更简单的方法是使用引用模型的ModelChoiceField
,而不是ChoiceField
。像这样:
class ThingSelector(forms.Form):
thing = forms.ModelChoiceField(queryset=Things.objects.all()
这应该意味着当添加新的Thing
个对象时,可以在表单中选择它们。