2011-01-15 2 views
7

Я использую fixture для тестирования приложения Pylons, но я наткнулся на проблему.Получение первичного ключа (id) в fixture (Python, SQLAlchemy)

Допустим, у меня есть такой набор данных:

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 

Теперь проблема в том, что, когда я использую эти данные в функциональном тесте (как описанные в http://farmdev.com/projects/fixture/using-fixture-with-pylons.html), я не могу получить идентификатор (первичный ключ) компании.

В моем приложении пользователь после входа в систему должен быть перенаправлен на страницу профиля компании, поэтому мне нужен идентификатор компании. Тест выглядит более или менее, как это:

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 

Первые журналы запросов в пользователя, а второй проверки, если после входа в систему она может получить доступ к странице профиля компании.

Таким образом, я получаю:

AttributeError: class test_company has no attribute 'company_id'

Я также попытался:

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

Но это приводит:

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

, который кажется странным мне ... Почему ISN» t он загружен?

Есть ли способ узнать, что является основным ключом?

ответ

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

'company_id' является столбцом первичного ключа в таблице' company', а не внешним ключом в таблице 'user' (которая является' user_company_id'). Не обвиняйте меня в соглашении об именах, я не проектировал эту базу данных, я просто работаю с ней;) –

+0

По умолчанию в вашем первичном ключе DataSet будет «id» http://farmdev.com/ проекты/fixture/api/fixture.dataset.html # fixture.dataset.DataSetMeta – estin

+0

Я пробовал это, это ничего не меняет. Я продолжаю получать ". Я даже попытался добавить в набор данных «класс Meta: primary_key = ['company_id']', и он ничего не меняет в обоих вариантах. –

Смежные вопросы