Django禁用小部件缓存?

时间:2014-04-28 16:51:53

标签: django django-forms django-widget

所以我有一个表单,我定义了一个像这样的选择小部件:

class AdHocVoucherTemplateForm(ModelForm):
    class Meta:
        model = AdHocVoucherTemplate
        widgets = {
            'retailer_id': Select(choices=[(r.pk, r.name) for r in Retailer.objects.all()]),
        }

这样我就可以与所有零售商实现一个选择输入字段。用户可以从下拉列表中选择零售商并提交表单。

我注意到的问题是,当我添加新零售商(Retailer.objects.create等)时,它不会出现在下拉列表中的表单中。它似乎是缓存的。当我重新启动运行Django的uwsgi服务时,它就在那里。

如何让窗口小部件始终刷新数据库中的最新值?

1 个答案:

答案 0 :(得分:2)

当我使用ModelChoiceField执行类似操作时,我没有看到此缓存行为。 它的默认小部件是Select。

类似的东西:

retailer = forms.ModelChoiceField(queryset=Retailer.objects.all())

当你的代码被评估时,那个choices参数被构造一次,然后你的select只有一个零售商(id,name)元组的静态列表。构造ModelChoiceField时,它引用的QuerySet在实际请求/显示选项列表之前不会被评估。