2011-12-13 17 views
6

Tengo un formulario que ingresa datos a db. Tengo otro formulario con un campo desplegable que usa los datos ingresados ​​en el primer formulario.Django Datos de recarga de formulario

Así que cuando envío los datos del primer formulario, el db se actualiza correctamente. Pero cuando cargo el segundo formulario, el menú desplegable no se actualiza con los datos más recientes.

pasos seguidos para la depuración de

El problema no es con la transacción/commit etc. La consulta para recuperar los datos para la caída en el segundo formulario es correcta.

El problema no es con vista al caché o bien (porque nosotros no tenemos ningún middleware de caché) También probamos los decoradores de caché como @ never_cahce, etc @ cache_control

intenté dar una declaración de impresión en la segunda forma . Creo que el problema es con la memoria caché de formularios. Cada formulario django se carga solo una vez, es decir. mientras carga la primera página del sitio. Después, el formulario se carga desde este caché.

Primera página

forma

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.'}) 

Segunda página

forma

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'})  

consulta

def getOrgUnitList(): 
    orgUnitList = list(OrganizationUnit.objects.values_list('OrgUnitID','OrgUnitName').order_by('OrgUnitName')) 
    return orgUnitList 

EDITAR

Todo está bien si uso modelforms.Why Así?

+0

¿Podría mostrarnos algunos ejemplos de código. nótese bien Deberá volver a cargar/recuperar los datos del archivo desde su primer formulario, que deberá visualizar en el menú desplegable de su segundo formulario. – c4urself

+0

Somos meros mortales: por favor proporcione el código real o de lo contrario estamos adivinando el problema. ¿Dónde exactamente esta consulta? ¿Estás seguro de que se está ejecutando? Incluso si eres positivo, ¡muéstranos! –

Respuesta

6

El problema es la declaración de orgUnitList como una propiedad de clase en el formulario. Esto significa que se llama una vez, cuando el formulario se definió originalmente. Por lo tanto, no se verán nuevos elementos hasta que se reinicie el proceso del servidor.

Una forma de solucionar este problema sería la de llamar a la función getOrgUnitList dentro del método de la forma __init__:

class AddOrganization(forms.Form): 
    ... 
    def __init__(self, *args, **kwargs): 
     super(AddOrganizationForm, self).__init__(*args, **kwargs) 
     self.fields['orgUnit'].choices = getOrgUnitList() 

Alternativamente, usted debe buscar en el uso de ModelChoiceField para la unidad organizativa, ya que se ocupa de este tipo de cosas automáticamente.

+0

Gracias. (\ * _ \ *) – Jibin

Cuestiones relacionadas