django - Django查询没有输出正确的结果
问题描述
我有一个名为的模型Post
和另一个名为Share
用户可以创建帖子或共享帖子的模型。我正在使用以下查询:
Post.objects.filter(
Q(user=user) |
Q(share__user=user)
).annotate(
shared_or_created=Coalesce('share__shared_at', 'created_at')
).order_by('-shared_or_created')
通过这个查询,我得到了正确的帖子,但是,假设另一个用户(用户 B)分享了这个用户的帖子,那么该shared_at
字段将是用户 B 分享它的时间。因此,如果用户有 3 个帖子和 1 个用户分享了该用户的帖子,那么其中两个帖子将具有创建帖子的正确时间,而第三个帖子将具有用户 B 共享该帖子的时间。
逻辑应该是按降序显示用户的帖子和他们共享的帖子。我该如何实施?
解决方案
您可以创建条件注释以根据条件注释值
from django.db import models
from django.db.models import Case, When, F
Post.objects.filter(
Q(user=user) |
Q(share__user=user)
).annotate(
shared_or_created=Case(
When(user=user, then=F('created_at')),
When(share__user=user, then=F('share__shared_at')),
output_field=models.DateTimeField()
)
).order_by('-shared_or_created')
推荐阅读
- c# - 当相机透视像 Matlab 视图一样发生变化时,修改 WPF 中绘制的轴上的 3D 坐标
- kubernetes - 无法将 kubernetes-bionic main (Ubuntu 18.04) 添加到 apt 存储库
- php - Doctrine AnnotationRegistry registerLoader替换
- angularjs - AngularJS - 使用'track by $index'时下拉过滤不会更新
- wordpress-gutenberg - 如何使用 php $content 在 Gutenberg 版本 4 中渲染 InnerBlocks
- eclipse - 从代理后面,我可以在 Eclipse 市场中找到东西,但无法安装它们
- javascript - mac中的端口转发用于本地角度开发
- r - 循环中的 TryCatch - R
- elasticsearch - 如何将 GCP 上的 Kubernetes Engine 连接到外部 Google Cloud Storage Bucket?
- c++ - 在 C++ 中使用 Cstrings 反转字符串