Как мне запросить ресурсы во вложенной коллекции в eve-sqlalchemy? - PullRequest
0 голосов
/ 11 мая 2018

Я использую Eve-SQLAlchemy == 0.5.0

Я бы хотел выполнить вложенный запрос с использованием Postman для моих пользователей, чтобы я нашел всех пользователей, входящих в указанную организацию.

Используя SQL, я бы написал свой запрос так:

select * from app_user
left join user_organization on user_organization.user_id = app_user.id
left join organization on organization.id = user_organization.organization_id
where organization.id = 2

У меня есть пользовательская модель, организационная модель и реляционная модель, связывающая две пользовательские организации.

from sqlalchemy import Column, DateTime, func, String, Integer
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class BaseModel(Base):
    id = Column(Integer, primary_key=True, autoincrement=True)
    __abstract__ = True
    _created = Column(DateTime, default=func.now())
    _updated = Column(DateTime, default=func.now(), onupdate=func.now())
    _etag = Column(String(40))


class User(BaseModel):
    __tablename__ = 'app_user'
    organizations = relationship("Organization", secondary=UserOrganization.__tablename__)


class Organization(BaseModel):
    __tablename__ = 'organization'
    name = Column(String)


class UserOrganization(BaseModel):
    __tablename__ = 'user_organization'
    user_id = Column(Integer,
                     ForeignKey('app_user.id', ondelete='CASCADE'))
    organization_id = Column(Integer,
                             ForeignKey('organization.id', ondelete='CASCADE'))

В моем settings.py у меня зарегистрированы ресурсы:

# Resource Registration
DOMAIN = DomainConfig({
    'organization': ResourceConfig(Organization),
    'user': ResourceConfig(User)
}).render()

У меня есть серия настроек коллекций почтальонов, и с помощью запроса GET я могу легко запросить любой атрибут ... GET localhost:5000/user?where={"id":1}

Я пробовал (среди прочего):

GET user?where={"organizations": {"organization_id" :2 }}
GET user?where={"organizations": 2}

1 Ответ

0 голосов
/ 13 мая 2018

Кажется, это невозможно в данный момент из-за ошибки.Я постараюсь исправить это в течение следующей недели.

Код в https://github.com/pyeve/eve-sqlalchemy/blob/master/eve_sqlalchemy/parser.py#L73 приводит к тому, что GET ?where={"organizations": 2} приводит к выражению SQL, например user_id = 42 AND organization_id = 42.Что редко имеет смысл.

...