Django表重新加载数据

时间:2011-12-13 07:23:50

标签: django forms 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.'})

第二页

形式

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,一切都很好。为什么呢?

1 个答案:

答案 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,因为它会自动处理此类事情。