我有一个将数据输入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.'})
第二页
形式
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'})
查询
def getOrgUnitList():
orgUnitList = list(OrganizationUnit.objects.values_list('OrgUnitID','OrgUnitName').order_by('OrgUnitName'))
return orgUnitList
修改
如果我使用modelforms,一切都很好。为什么呢?
答案 0 :(得分:6)
问题是在表单中声明orgUnitList
作为类属性。这意味着在最初定义表单时调用一次。因此,在重新启动服务器进程之前,不会看到任何新元素。
解决此问题的一种方法是在表单的getOrgUnitList
方法中调用__init__
函数:
class AddOrganization(forms.Form):
...
def __init__(self, *args, **kwargs):
super(AddOrganizationForm, self).__init__(*args, **kwargs)
self.fields['orgUnit'].choices = getOrgUnitList()
或者,您应该考虑将ModelChoiceField
用于orgUnit,因为它会自动处理此类事情。