python - Django:来自另一个表的 order_by 列
问题描述
我正在建立一个论坛并拥有下一个消息模型:
class Message(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
text = models.TextField(max_length=100000)
date_publication = models.DateTimeField(auto_now_add=True)
class Discussion(Message):
title = models.CharField(max_length=500)
views = models.PositiveBigIntegerField(default=0)
class Response(Message):
topic = models.ForeignKey(Discussion, on_delete=models.CASCADE)
reply_to = models.ForeignKey(
Message, on_delete=models.CASCADE, related_name='message_replied', null=True)
我想知道如何从响应中获取讨论 order_by date_publication 的列表。
解决方案
您可以通过以下方式订购:
from django.db.models import Max
from django.db.models.functions import Coalesce
Discussion.objects.alias(
latest_reply=Coalesce(Max('response__reply_to__date_publication'), 'date_publication')
).order_by('-latest_reply')
或者对于django-3.1及更早版本:
from django.db.models import Max
from django.db.models.functions import Coalesce
Discussion.objects.annotate(
latest_reply=Coalesce(Max('response__reply_to__date_publication'), 'date_publication')
).order_by('-latest_reply')
推荐阅读
- vba - 将变量的用户输入作为字符串获取以在 vba 访问中使用
- typescript - 将兼容类型分配给可区分的联合类型时出错
- powershell - 通过powershell请求通知权限
- node.js - 控制台日志未使用 express 和 socket.io 记录
- avro - Kafka 存储的 avro 记录向后模式兼容性
- javascript - 用于 svg 折线 JS 的拆分数组
- android - 使用改造从不同的相对路径获取 url
- javascript - JS重定向后会话丢失
- angularjs - 具有回调函数的Angularjs 1.5组件模式不更新绑定
- loops - 带有 loop_control 和 loop_var Ansible 的循环变量