python - Flask-SQLAlchemy 自定义顺序,在同一个表上具有多个连接
问题描述
我有以下模型关系和定义:
- A
Post
可以有多个PostLike
s - A
PostLike
有一个User
- A
User
可以与其他用户有多个Relationship
s,通过requested_relationships
或received_relationships
- A
Relationship
可以是不同的类型。
我想查询帖子上的所有点赞,并按帖子点赞的用户关系类型对它们进行排序。非常类似于 Instagram 的“点赞”功能。
这是我所做的 sqlalchemy 查询。它没有给我我正在寻找的结果:
def get_liked_by(self):
relationship_l = aliased(Relationship)
relationship_r = aliased(Relationship)
post_likes = (
self._post.likes.filter(
PostLike.user.has(
or_(
User.received_relationships.any(
and_(
relationship_l.from_user == self._current_user,
relationship_l.confirmed == True,
)
),
User.requested_relationships.any(
and_(
relationship_r.to_user == self._current_user,
relationship_r.confirmed == True,
)
),
)
)
)
.join(relationship_l, User.received_relationships)
.join(relationship_r, User.requested_relationships)
.order_by(
case(
value=relationship_l.type, # I want both directions to be applied
whens={
RelationshipType.romantic.value: 1,
RelationshipType.friend.value: 2,
RelationshipType.family.value: 3,
RelationshipType.acquaintance.value: 4,
RelationshipType.professional.value: 5,
},
)
)
.limit(3)
.all()
)
以下是我正在努力解决的问题,需要解决方案:
- 此查询有效,但返回 0 个结果。一旦我添加连接,结果就会消失
- 目前,
case
仅由 订购received_relationships
。如何将其更改为双向订购?
解决方案
推荐阅读
- python - BeautifulSoup 不让我得到文本
- html - 如何使用 Bootstrap 水平对齐 div
- c++ - C/C++:轻松的 std::atomic
vs X64 架构上的未锁定布尔值 - java-11 - 使新的 JDK 11 java.net.http 包在 Netbeans 10 中可见
- android - 如何以递归方式每 5 分钟从服务器获取位置并在 Google 地图中显示车辆的当前位置?
- python - Python matplotlib - 如何绘制具有多个系列的折线图?
- python - 需要一个 defaultdict 值作为两个列表
- javascript - TypeError:无法使用 NvD3Module 在 Angular 中读取未定义的属性“线性”
- graphql - Shopify Ajax API 是否支持 Graphql?
- c - 用数字和单词扫描一行,然后将单词保留在 c 中