gpt4 book ai didi

Django 表单重新加载数据

转载 作者:行者123 更新时间:2023-12-04 12:12:12 26 4
gpt4 key购买 nike

我有一个将数据输入到数据库的表单。
我有另一个带有下拉字段的表单,该表单使用第一个表单输入的数据。

因此,当我从第一个表单提交数据时,数据库会正确更新。
但是当我加载第二个表单时,下拉列表没有更新为最新数据。

调试步骤

问题不在于事务/提交等。
以第二种形式检索下拉列表数据的查询是正确的。

问题也不在于 View 缓存(因为我们没有任何缓存中间件)
我还尝试了像@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,一切都很好。为什么如此?

最佳答案

问题是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,因为它会自动处理这类事情。

关于Django 表单重新加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8485677/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com