2011-01-15 16 views
7

Sto usando fixture per testare un'app Pylons, ma mi sono imbattuto in un problema.Ottenere la chiave primaria (id) nella fixture (Python, SQLAlchemy)

Diciamo che ho un tale insieme di dati:

class CompanyData(DataSet): 

    class test_company: 
     company_full_name = u'Firma Tęst' 
     company_short_name = u'TęstCo' 

class UserData(DataSet): 

    class test_user: 
     user_login = 'testuser' 
     user_password = 'test' 
     company = CompanyData.test_company 

Ora, il problema è che quando uso questi dati in un test funzionale (come descritto in http://farmdev.com/projects/fixture/using-fixture-with-pylons.html), non riesco a ottenere l'ID (chiave primaria) dell'azienda.

Nella mia applicazione l'utente dopo il login deve essere reindirizzato alla pagina del profilo aziendale ed è per questo che ho bisogno dell'ID dell'azienda. Il test sembra più o meno così:

self.app.post(url(controller='main', action='login'), params={ 
    'login': UserData.test_user.user_login, 
    'password': UserData.test_user.user_password 
}) 

response = self.app.get(url(
    controller='events', action='index', 
    company_id=UserData.test_user.company.company_id, # This doesn't work 
    view='active')) 
assert ... in response 

I primi registri delle richieste del manuale e la seconda controlla se dopo l'accesso si può accedere alla pagina del profilo aziendale.

In questo modo ottengo:

AttributeError: class test_company has no attribute 'company_id'

Ho anche provato:

UserData.test_user.company.ref('company_id') 

Ma traduce in:

<Ref.RefValue for CompanyData.test_company.company_id (not yet loaded)>

che sembra strano per me ... Perché isn' è caricato?

C'è un modo per scoprire qual è la chiave primaria?

risposta

0
UserData.test_user.company.ref('id') 
or 
UserData.test_user.ref('company_id') 
+0

'company_id' è la colonna chiave principale nella tabella' company', non una chiave esterna nella tabella 'user' (che è' user_company_id'). Non incolpare me per la convenzione di denominazione, non ho progettato questo database, lavoro solo con esso;) –

+0

Per impostazione predefinita nella tua chiave primaria del tuo DataSet sarebbe 'id' http://farmdev.com/ project/fixture/api/fixture.dataset.html # fixture.dataset.DataSetMeta – estin

+0

L'ho provato, non cambia nulla. Continuo a ricevere "". Ho anche provato ad aggiungere 'class Meta: primary_key = ['company_id']' al set di dati e non cambia nulla in entrambe le varianti. –

Problemi correlati