2011-01-15 22 views
7

Estoy usando fixture para probar una aplicación de Pylons, pero me encontré con un problema.Obteniendo la clave primaria (id) en el dispositivo (Python, SQLAlchemy)

Digamos que tengo de estos conjuntos de datos:

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 

Ahora, el problema es que cuando utilizo estos datos en una prueba funcional (como se describe en http://farmdev.com/projects/fixture/using-fixture-with-pylons.html), no puedo obtener el id (clave principal) de la empresa.

En mi aplicación, el usuario después de iniciar sesión debe ser redirigido a la página de perfil de la empresa y es por eso que necesito la identificación de la empresa. La prueba se ve más o menos así:

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 

Los primeros registros de solicitudes en el usuario y el segundo comprueba si después de entrar en ella pueden acceder a la página de perfil de la empresa.

De esta manera me sale:

AttributeError: class test_company has no attribute 'company_id'

También probé:

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

Pero el resultado es:

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

que parece extraño para mí ... ¿Por qué ISN' ¿está cargado?

¿Hay alguna forma de averiguar cuál es la clave principal?

Respuesta

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

'company_id' es la columna de clave principal en la tabla' company', no una clave externa en la tabla 'user' (que es' user_company_id'). No me culpe por la convención de nomenclatura, no diseñé esta base de datos, solo trabajo con ella;) –

+0

Por defecto en la suya la clave primaria del DataSet sería 'id' http://farmdev.com/ projects/fixture/api/fixture.dataset.html # fixture.dataset.DataSetMeta – estin

+0

Lo intenté, no cambia nada. Sigo recibiendo "". Incluso intenté agregar 'clase Meta: primary_key = ['company_id']' al conjunto de datos y no cambia nada en ambas variantes. –

Cuestiones relacionadas