2010-09-13 3 views
10

Sono in procinto di impostare un'installazione di prova del mio attuale progetto Python/Django. Tutto funziona perfettamente sul mio server di sviluppo, ma di recente abbiamo creato una nuova VM per il test e le eventuali copie di produzione del progetto. Sto usando Python, Django, SqlAlchemy (con un backend MSSQL) e WTForms come i miei pacchetti principali.QuerySelectField funziona su un server, interrompe su un altro con lo stesso codice

Sto riscontrando un problema in cui il mio server di test non si comporta correttamente. Non ho personalmente installato o installato questi pacchetti su nessuno dei due server (fatto da qualcuno che ora non c'è più), quindi non so davvero tutto su questo, ma so che sul mio server di test sono stato avendo un sacco di problemi che non sto avendo sul server di sviluppo. Ad esempio, Django non stava risolvendo i metodi correttamente quando li usavo nei template (restituiva "metodo associato UserForm.action di ... etc" invece del valore restituito), e ora sembra che stia scrivendo un numero di cose in interi quando non vengono mai dichiarati come tali. Le versioni di python, django, wtforms, sqlalchemy sono le stesse su tutti i server. Ecco il codice di esempio che funziona bene sul server dev, ma rompe sul server di prova (con messaggio di errore):

forms.py:

class NewPracticeForm(wtforms.Form): 
    Name = wtforms.TextField("Practice Name", [wtforms.validators.Required()]) 
    OrgID = safields.QuerySelectField("Organization", pk_attr='OrgID') 
    action = '/Admin/H/newpractice/' 

pulsedb.py (definizione di tabella sqlalch):

#engine created here, can include that if necessary but its just a standard engine=create_engine() using pymssql 
Base = declarative_base() 
metadata = Base.metadata 

class Practice(Base): 
    __tablename__ = 'Practice' 
    Name  = Column(String(256) , nullable=False) 
    OrgID  = Column(String(30) , ForeignKey('dbo.Orglist.OrgID') , nullable=False) 

views.py:

def partNewPractice(request): 
    context = Context() 
    frm = forms.NewPracticeForm() 
    frm.OrgID.query = pwdb.session.query(pwdb.OrglistMap) 
    context['form'] = frm 
    #Return the response here using a method which just tacks a couple things on before returning a normal response 

E così, seleziono un'organizzazione dal campo di selezione, wh ich pubblica "OrgID = Z55" (poiché la tabella OrgID utilizza una stringa 3character come colonna ID), ma da qualche parte lungo la linea ciò causa un problema. La forma punta a un gestore che fa:

services.py

def HandlerAddPractice(request): 
    prac = pdb.Practice() 
    frm = forms.NewPracticeForm(request.POST, obj=prac) 
    frm.OrgID.query = pwdb.session.query(pwdb.OrglistMap) 

E questo è quanto, come si arriva, perché il programma genera un errore:

invalid literal for int() with base 10: 'Z55' 

ho trovato questo si verifica anche in un campo simile con QuerySelectField, dove tenta di convertire un UUID in un numero intero per qualche motivo. C'è un'ambientazione che mi manca? Sono stato in grado di aggirare la questione del metodo, ma non è qualcosa che posso ignorare e aggirare a questo punto. Grazie! Qualsiasi altro codice/informazione disponibile su richiesta. Inoltre, ci sono molti altri campi, ma li ho lasciati fuori nell'interesse della brevità.

+2

E dove entra in gioco esattamente Django? –

+2

se usi SQLalchemy e WTForms difficilmente mi sembra di usare Django :) – Anentropic

+2

Penso che potresti eliminare un sacco di problemi se rimuovi django (poiché come @AndreBossard non riesco a vedere dove viene usato) e usi qualcosa di leggero - come Flask che supporta sia WTForms che SQLAlchemy. –

risposta

1

Questo sembra un problema di distribuzione.

Ci sono fondamentalmente tre modi per distribuire django:

  1. a livello di sistema installare
  2. implementare ampliato directory Django con il codice, l'importazione utilizzando percorso relativo
  3. utilizzando virtualenv

Il mio approccio sarebbe quello di selezionare una di queste opzioni (probabilmente 2 o 3, anche a seconda di come si installano le altre dipendenze come SqlAlchemy); quindi controlla se non ci sono conflitti con altre distribuzioni.

+0

+1 per l'approccio virtualenv –