Django 表单缓存或重新加载问题

Tom*_*Joy 5 forms django

我有一个页面可以将值插入到数据库中。插入后加载另一个页面,其中包含列出数据库值的下拉列表,但插入的值未在下拉列表中列出

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

表格1(首页)

class Organization(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)

Form2(第二页)

class User(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)

但是当我尝试绑定视图中的选择时,它正在工作 代码 *视图*

def user()
    template = get_template('AddUser.html')
    form = AddUser()     
    orgUnitList = getOrgUnitList()                    
    del objAdminUIDA
    form.fields['orgUnit'].widget.choices=orgUnitList
    variables = RequestContext(request,{'form':form})
    output = template.render(variables)
    del form
    return HttpResponse(output)
Run Code Online (Sandbox Code Playgroud)

但我无法给出下拉选项,因为我想在 form 中给出选择。我需要 form2 的解决方案

DrT*_*rsa 1

首先,orgList在表单定义中进行评估,这就是选择不会改变的原因。您应该放置getOrgUnitList在表单中__init__(或其他方法中)。

其次,您不向表单传递任何数据,可能是您想要的

form = AddUser(request.POST or None)
Run Code Online (Sandbox Code Playgroud)