Sqlalchemy графен глубоко вложенные схемы - PullRequest
0 голосов
/ 23 апреля 2020

я новичок в графене

Я трижды получаю информацию от 3-х моделей: две модели соединяются (пользователь и классы), имеет отношения многие-ко-многим, одна модель (уроки) соединяется как много-к один с моделью классов.

Моя цель - иметь возможность показывать информацию о модели класса в виде списка внутри класса после пользовательских данных. Но я только мог показать данные между Пользователем и Классами. Но нужно было перечислить все данные пользователя -> Классы -> Уроки. Как это сделать?

вот как это должно выглядеть

мои модели:

table = Table('table', Base.metadata,
    Column('left', Integer, ForeignKey('left.id')),
    Column('right', Integer, ForeignKey('right.id'))
)

class User(Base):
    __tablename__ = 'right'
    id = Column(Integer, primary_key=True)
    name = Column(String(255))
    lessons = relationship("Class",
                    secondary=table,
                    backref="user")

class Classes(Base):
    __tablename__ = 'left'
    id = Column(Integer, primary_key=True)
    name = Column(String(255))
    lessons = relationship('User', backref='classes')



class Lessons(Base):
    __tablename__ = 'lessons'
    id = Column(Integer, primary_key=True)
    name = Column(String(255))
    class_id= Column(Integer, ForeignKey('class.id'))

Мои схемы и запросы:

class UserSchema(SQLAlchemyObjectType):
    class Meta:
        model = User
        interfaces = (relay.Node, )


class ClassesSchema(SQLAlchemyObjectType):
    class Meta:
        model = Contract
        interfaces = (relay.Node, )

class LessonsSchema(SQLAlchemyObjectType):
    class Meta:
        model = Plan
        interfaces = (relay.Node,)


class Query(graphene.ObjectType):
    node = relay.Node.Field()
    # Allows sorting over multiple columns, by default over the primary key
    all = SQLAlchemyConnectionField(UserSchema)
    # Disable sorting over this field
    all_classes = SQLAlchemyConnectionField(ClassesSchema)

    all_lessons = SQLAlchemyConnectionField(LessonsSchema)

schema = graphene.Schema(query=Query)

выходная коса:

{
  "data": {
    "all": {
      "edges": [
        {
          "node": {
            "id": "TWFpbmNoZW1hOjE=",
            "name": "User 1",
            "Classes": {
              "edges": [
                {
                  "node": {
                    "id": "Q29udHJhY3RTY2hlbWE6Mg==",
                    "name": "First class",
                    "lessons": {
                      "edges": []
                    }
                  }
                }
              ]
            }
          }
        },

Основная проблема в том, что список уроков пуст, но если я запрашиваю уроки, он показывает информацию, и он не пуст.

...