2011-12-13 14 views
6

Ho un modulo che immette dati in db. Ho un altro modulo con un campo a discesa che utilizza i dati immessi dal primo modulo.Django Form ricarica dati

Così quando invio dati dal primo modulo, il db viene aggiornato correttamente. Ma quando carico il secondo modulo il menu a tendina non viene aggiornato con i dati più recenti.

passaggi seguiti per il debug

Il problema non è con la transazione/commit ecc La query per recuperare i dati per il menu a discesa nella seconda forma è corretta.

Il problema non è con cache della vista o (cos non abbiamo alcun middleware cache) Ho anche provato il decoratori di cache come @ never_cahce, @ cache_control ecc

ho provato dando un comunicato stampa in seconda forma . Credo che il problema sia con la cache dei moduli. Ogni forma di django viene caricata una sola volta, es. durante il caricamento della prima pagina del sito. Successivamente il modulo viene caricato da questa cache.

Prima pagina

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

Seconda pagina

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

Query

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

EDIT

Tutto è bene se uso modelforms.Why Quindi?

+0

Potrebbe mostrarci alcuni esempi di codice. N.B. Dovrai ricaricare/recuperare i dati dal db dal tuo primo modulo che devi visualizzare nel menu a discesa del tuo secondo modulo. – c4urself

+0

Noi siamo semplici mortali: si prega di fornire il codice attuale oppure stiamo solo indovinando il problema. Dove si trova esattamente questa domanda? Sei positivo che venga eseguito? Anche se sei positivo, mostraci! –

risposta

6

Il problema è la dichiarazione di orgUnitList come proprietà di classe nel modulo. Ciò significa che viene chiamato una volta, quando il modulo è stato originariamente definito. Quindi nessun nuovo elemento verrà visto, fino a quando il processo del server non viene riavviato.

Un modo per risolvere questo problema sarebbe quello di chiamare la funzione getOrgUnitList all'interno del metodo della forma __init__:

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

In alternativa, si dovrebbe considerare di usare ModelChoiceField per OrgUnit, in quanto si occupa di questo genere di cose automaticamente.

+0

Grazie. (\ * _ \ *) – Jibin

Problemi correlati