Skip to content

How to search the Sqlalchemy relationship object by flask-msearch #65

@Hardman233

Description

@Hardman233

Hello sir, demo code as follows:

from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint
from sqlalchemy.orm import relationship
from marshmallow import fields
from src.base.base_model import BaseModel, BaseModelSchema
from src.role.models import RoleBase


class User(BaseModel):
    __tablename__ = 'user'
    __searchable__ = ['username', 'email']
    __table_args__ = (
        UniqueConstraint('username', 'is_deleted', name='uq_username_deleted'),
    )
    id = Column(Integer, primary_key=True)
    username = Column(String(20), nullable=False)
    password = Column(String(255), nullable=False)
    name = Column(String(255), nullable=True)
    email = Column(String(50), nullable=True)
    sex = Column(Integer, nullable=True)
    phone = Column(String(20), nullable=True)
    role_id = Column(Integer, ForeignKey("role.id"), nullable=False)
    role = relationship("Role", backref="user_role")


class UserBase(BaseModelSchema):
    class Meta:
        model = User
        load_instance = True

    id = fields.Integer(dump_only=True)
    username = fields.String(required=True)
    password = fields.String(required=True, load_only=True)
    name = fields.String()
    email = fields.String()
    role_id = fields.Integer(required=True)
    phone = fields.String()
    sex = fields.Integer()
    role = fields.Nested(RoleBase)


class UserRead(UserBase):
    pass


class UserToken(BaseModelSchema):
    user_id = fields.Integer(dump_only=True)
    token = fields.String(dump_only=True)
    username = fields.String(dump_only=True)


class UserPagination(BaseModelSchema):
    total = fields.Integer(dump_only=True)
    page = fields.Integer(dump_only=True)
    items_per_page = fields.Integer(dump_only=True)
    items = fields.List(fields.Nested(UserRead))
    current_total = fields.Integer(dump_only=True)


from sqlalchemy import Column, Integer, String
from src.base.base_model import BaseModel, BaseModelSchema
from marshmallow import fields


class Role(BaseModel):
    __tablename__ = 'role'
    __searchable__ = ['code', 'description']
    id = Column(Integer, primary_key=True)
    code = Column(String(20), nullable=False, unique=True)
    description = Column(String(100), nullable=True)


class RoleBase(BaseModelSchema):
    class Meta:
        model = Role

    id = fields.Integer(dump_only=True)
    code = fields.String(required=True)
    description = fields.String(required=True)

How to use flask-msearch to search role.code through User.query.msearch
Looking forward to your reply, thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions