Jib*_*bin 7 forms django caching
我有一个将数据输入db的表单.我有另一个带有下拉字段的表单,它使用第一个表单输入的数据.
因此,当我从第一个表单提交数据时,db会正确更新.但是当我加载第二个表单时,下拉列表不会使用最新数据进行更新.
调试步骤如下
问题不在于事务/提交等.以第二种形式检索下拉数据的查询是正确的.
问题不在于视图缓存(因为我们没有任何缓存中间件)我也尝试过像@ never_cahce,@ cache_control等缓存装饰器
我尝试以第二种形式给出一个打印声明.我相信问题在于表单缓存.每个django表单只加载一次,即.在加载网站的第一页时.然后从此缓存加载表单.
第一页
形成
class AddOrganization(forms.Form):
orgList = getOrgUnitList()
orgUnit = forms.CharField(label=u'Organization Name',
max_length=50,
error_messages={'required':'Organization name is required field.'})
parentOrg= forms.ChoiceField(label=u'Parent Organization',
choices=[(u'Select',u'Select')]+orgList,
error_messages={'required':'Organization name is required field.'})
Run Code Online (Sandbox Code Playgroud)
第二页
形成
class AddUser(forms.Form):
orgUnitList = getOrgUnitList()
email = forms.EmailField(label=u'Email',
max_length=50,
error_messages={'required':'Email is required field'})
orgUnit = forms.ChoiceField(label=u'Organizational Unit',
choices=orgUnitList,
error_messages={'required':'Organizational unit is required field'})
Run Code Online (Sandbox Code Playgroud)
询问
def getOrgUnitList():
orgUnitList = list(OrganizationUnit.objects.values_list('OrgUnitID','OrgUnitName').order_by('OrgUnitName'))
return orgUnitList
Run Code Online (Sandbox Code Playgroud)
编辑
如果我使用modelforms,一切都很好.为什么呢?
问题是orgUnitList
在表单中声明为类属性.这意味着在最初定义表单时调用一次.因此,在重新启动服务器进程之前,不会看到任何新元素.
解决这个问题getOrgUnitList
的__init__
一种方法是在窗体的方法中调用函数:
class AddOrganization(forms.Form):
...
def __init__(self, *args, **kwargs):
super(AddOrganizationForm, self).__init__(*args, **kwargs)
self.fields['orgUnit'].choices = getOrgUnitList()
Run Code Online (Sandbox Code Playgroud)
或者,您应该考虑使用ModelChoiceField
orgUnit,因为它会自动处理这类事情.
归档时间: |
|
查看次数: |
3135 次 |
最近记录: |