python - Flask-SQLALCHEMY 中条件的自引用关系
问题描述
我正在尝试构建烧瓶应用程序,其中用户拥有自己独特的自构建类别集
Category_set 是根据邻接列表关系 sqlalchemy 构建的。模型看起来像这样:
user_categories = db.Table('user_cat',
db.Column('cat_id', db.Integer, db.ForeignKey('category.id'), primary_key=True),
db.Column('user_id', db.Integer, db.ForeignKey('user.id'), primary_key=True)
)
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
password = db.Column(db.String(60), nullable=False)
class Category(db.Model):
id = db.Column(db.Integer, primary_key=True)
category_parent_id = db.Column(db.Integer, db.ForeignKey(id))
name = db.Column(db.String(50), nullable=False)
users = db.relationship('User', secondary=user_categories, lazy='subquery',
backref=db.backref('category_set', lazy=True))
subcategories = db.relationship(
"Category",
cascade="all, delete-orphan",
backref=db.backref("parent", remote_side=id, lazy='subquery'),
collection_class=attribute_mapped_collection("name"))
现在的问题:假设我进行查询:
Category.query.join(Category.users).filter(User.id == current_user.id).filter(
Category.category_parent_id == 1).all()
我将始终只为 current_user 而过滤子类别而不是子类别。我试图以某种方式弄清楚我似乎在建立关系时必须对我进行过滤。
我写了查询(可能是通过 user_id 添加过滤器)看起来像解决了我的问题,但无法在 sqlalchemy 上重现它
Select * from category as cat
join public.category as cat_1 on
(cat.id=cat_1.category_parent_id)
join public.user_cat as uc on
(uc.cat_id=cat_1.id)
我试图添加某种primaryjoin或其他东西,但是它总是失败。任何想法或更简单的解决方案?
谢谢!
解决方案
推荐阅读
- sql - 如果子查询没有与查询连接,则无法使用不存在关键字
- android - 如何从右侧创建一个工作表幻灯片,就好像它是一个底部工作表对话框?
- android - 带有活动和 PagerView2 的 Android 导航
- java - minecraft forge java.lang.IllegalArgumentException:具有相同密钥的多个条目
- javascript - 在对象数组中查找“albumId”属性最大值为 3 的对象,例如 100,99,98
- python - 如何显示没有特定部分的变量?
- azure - Azure 管道:SqlAzureDacpacDeployment 无法执行
- angular - 更改 mat-date-picker-toggle 中按钮的 aria-label
- reactjs - 在钩子中反应 js .bind(this)
- postgresql - 显示服务器名称、实例 ID 和活动会话数的视图(如果结束时间戳为空,则会话处于活动状态)