SQLAlchemy и Pyramid, как вывести ресурсы из контекста?

У меня проблема с тем, чтобы обернуть голову вокруг моего веб-приложения Pyramid. У меня его структура очень похожа на описанную Майклом Мерикелем здесь , за исключением того, что я использую чистый обход, чтобы найти свои взгляды. (Они объявлены сконфигурированными с context = 'path.toResource' name = 'myView'), довольно стандартная плата за проезд, согласно тому, что я могу сказать из руководства по обходу вики. У моего приложения более сложная структура URL-адресов: мои пользовательские ресурсы находятся в / users / {user_id} , а мои проекты - в / projects / {project_id} . Все мои ресурсы сохраняются с использованием SQLAlchemy ORM; У меня есть класс User и Project с атрибутами __ name __ и __ parent __ , а также другими атрибутами, расширяющими столбцы.

class User(Base):
    id = Column(...)
    __name__ = None
    __parent__ = None
Class Project(Base):
    id = Column(...)
    __name__ = None
    __parent__ = None
    owner_id = Column(...ForeignKey(User.id))
    owner = relationship(User,...)

У меня есть RootFactory, ProjectFactory и UserFactory, которые заполняют соответствующие атрибуты __ name __ и __ parent __ в своих вызовах __ get_item __ .

Итак, в функциях просмотра для контекста проекта я получаю экземпляр проекта в request.context. Моя проблема в том, как, черт возьми, ссылаться на соответствующий экземпляр пользователя? Я не могу работать над проектом.owner, потому что этот экземпляр User не прошел через цепочку RootFactory, поэтому его значения __ parent __ и __ name __ не установлены. Это плохо, потому что я хочу использовать request.resource_url, чтобы найти URL-адрес пользователя-владельца, поэтому я могу разместить ссылку на странице просмотра.

Какое здесь решение ТАК? Могу ли я делать все через request.root? Что, если я хочу сделать сложный запрос, который возвращает экземпляры User или Project? Есть ли какой-то CrapFactory, который я могу передать SQLAlchemy, чтобы все его экземпляры были заполнены правильно?

Мой подход совершенно неверен?

Мне кажется, у меня не было бы таких проблем, если бы я просто придерживался URL-маршрутизации ...

5
задан Community 23 May 2017 в 12:14
поделиться