在django中保持表单选择列表最新

时间:2015-02-20 00:55:49

标签: python-2.7 django-forms django-1.7

我的管理网站中有一个表单,用户可以从下拉列表中选择特定模型中的单个对象。

thing_choices = [(x.id, x) for x in Things.objects.all()]

class ThingSelector(forms.Form):
    thing = forms.ChoiceField(choices=thing_choices)

如果我首先添加一个新的Thing对象,然后转到带有选择器表单的页面,我发现该对象没有出现在下拉列表中。这可能是当我第一次站起来服务器时,表单中填充了选项。测试证明了这一点,因为如果我重新启动Django,新的选择将出现在列表中。

我如何解决这个问题,以便我可以创建对象并将它们显示在此表单上?

(更多信息:所选的东西随表单一起提交,以便在其上进行处理。)

...谢谢

1 个答案:

答案 0 :(得分:1)

  

如果我首先添加一个新的Thing对象,然后转到带有选择器表单的页面,我发现该对象没有出现在下拉列表中。这可能是当我第一次站起来服务器时,表单中填充了选项。

正确,变量thing_choices是在您的代码首次运行时计算的,如果它与您的表单处于相同的范围,则不太可能再次运行。

更简单的方法是使用引用模型的ModelChoiceField,而不是ChoiceField。像这样:

class ThingSelector(forms.Form):
    thing = forms.ModelChoiceField(queryset=Things.objects.all()

这应该意味着当添加新的Thing个对象时,可以在表单中选择它们。