考虑以下两个模型:
class Post(models.Model):
created_at = models.DateTimeField(default=timezone.now)
class Reply(models.Model):
a = models.ForeignKey(Post, related_name='replies')
created_at = models.DateTimeField(default=timezone.now)
现在我想按created_at
模型Post
和created_at
模型排序Reply
(它具有最高优先级)。
假设,我有两个帖子 p1 的创建时间大于 p2,但 p2 的回复的创建日期大于 p1。所以p2应该先出现,然后p1。
我试图在经理中做到这一点,但它并没有给我我想要的顺序:
class PostManager(models.Manager):
def get_query_set(self):
return super(PostManager, self).get_query_set().annotate(
reply_date=Max('replies__created_at')
).order_by('-reply_date', '-created_at')
原来问题是这样的:
有一种情况是较新的帖子还没有任何回复,因此 Max('replies__created_at') 为 None
这将使所有没有任何回复的帖子都列在所有有回复的帖子之后。
有什么帮助吗??