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à.
E dove entra in gioco esattamente Django? –
se usi SQLalchemy e WTForms difficilmente mi sembra di usare Django :) – Anentropic
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. –