2011-01-15 3 views
7

Ich verwende fixture, um eine Pylons App zu testen, aber ich stolperte über ein Problem.Abrufen des Primärschlüssels (ID) in Fixture (Python, SQLAlchemy)

Lassen Sie uns sagen, dass ich eine solche Datenmenge haben:

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 

Nun, das Problem ist, dass, wenn ich diese Daten in einem Funktionstest verwenden (wie bei http://farmdev.com/projects/fixture/using-fixture-with-pylons.html beschrieben), kann ich die ID nicht erhalten (Primärschlüssel) des Unternehmens.

In meiner Anwendung sollte der Benutzer nach der Anmeldung auf die Firmenprofilseite umgeleitet werden und deshalb brauche ich die ID des Unternehmens. Der Test sieht mehr oder weniger wie folgt aus:

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 

die erste Anforderung meldet dem Benutzer und der zweite überprüft, ob nach dem in sie Protokollierung der Firmenprofilseite zugreifen können.

Auf diese Weise erhalte ich:

AttributeError: class test_company has no attribute 'company_id'

ich auch versucht:

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

Aber es ergibt sich:

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

, die mir seltsam scheint ... Warum isn‘ t es geladen?

Gibt es eine Möglichkeit herauszufinden, was der Primärschlüssel ist?

Antwort

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

'company_id' ist die Primärschlüsselspalte in der' company' Tabelle, kein Fremdschlüssel in der 'user' Tabelle (die' user_company_id' ist). Tadeln Sie mich nicht für die Namenskonvention, ich habe diese Datenbank nicht entworfen, ich arbeite nur damit;) –

+0

Standardmäßig in Ihrem DataSet Primärschlüssel wäre 'id' http://farmdev.com/ projects/fixture/api/fixture.dataset.html # fixture.dataset.DataSetMeta – estin

+0

Ich habe das versucht, es ändert nichts. Ich bekomme immer "". Ich habe sogar versucht, 'class Meta: primary_key = ['company_id']' zu dem Datensatz hinzuzufügen und es ändert nichts in beiden Varianten. –

Verwandte Themen