Python Meta中的Django模型排序不起作用

Python Meta中的Django模型排序不起作用,python,django,sqlite,Python,Django,Sqlite,我正在尝试建立一个类似于Twitter的社交网络,用户可以发布帖子,并且可以按时间倒序查看帖子(最新的帖子优先)。我正在使用Django3.1.7构建它 我已将我的模型定义如下: class Post(models.Model): date_published = models.DateTimeField(auto_now_add=True) user = models.ForeignKey(User, on_delete=models.CASCADE) content

我正在尝试建立一个类似于Twitter的社交网络,用户可以发布帖子,并且可以按时间倒序查看帖子(最新的帖子优先)。我正在使用Django3.1.7构建它

我已将我的模型定义如下:

class Post(models.Model):
    date_published = models.DateTimeField(auto_now_add=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    content = models.CharField(max_length=240, blank=False, default=None)
    user_like = models.ManyToManyField(User, blank=True, related_name='likes')

    def __str__(self):
        return f'{self.user.username} posted \"{self.content}\" on {self.date_published}'

    class Meta:
        ordering = ('-date_published',)
@login_required
def following(request):
    authors_followed = Follow.objects.filter(
        follower=request.user).values('author')

    posts = Post.objects.filter(user__in=authors_followed).annotate(
        likes=Count('user_like'))

    return render(request, "network/following.html", {
        'posts': posts
    })
然后我从
views.py
文件中查询我的数据库,如下所示:

class Post(models.Model):
    date_published = models.DateTimeField(auto_now_add=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    content = models.CharField(max_length=240, blank=False, default=None)
    user_like = models.ManyToManyField(User, blank=True, related_name='likes')

    def __str__(self):
        return f'{self.user.username} posted \"{self.content}\" on {self.date_published}'

    class Meta:
        ordering = ('-date_published',)
@login_required
def following(request):
    authors_followed = Follow.objects.filter(
        follower=request.user).values('author')

    posts = Post.objects.filter(user__in=authors_followed).annotate(
        likes=Count('user_like'))

    return render(request, "network/following.html", {
        'posts': posts
    })
但是,这些职位并没有按照我预期的相反顺序出现。令人惊讶的是,如果我指定
.order\u by('-date\u published')
进行反查询,它会按预期工作

为什么
类Meta
中定义的
排序
属性不起作用?发生了什么事?我已经完成了所有迁移并迁移了数据库。如果相关的话,我正在使用sqlite。谢谢。


编辑:我也尝试过使用语法
ordering=['-date\u published']
,但它也不起作用。

每个字符串都是一个带有可选“-”前缀的字段名,表示降序。没有前导“-”的字段将按升序排列。使用字符串“?”随机排序

例如,要按发布日期字段升序排序,请使用以下命令:

ordering = ['pub_date']
ordering = ['-pub_date']
ordering = ['-pub_date', 'author']
要按发布日期降序订购,请使用以下命令:

ordering = ['pub_date']
ordering = ['-pub_date']
ordering = ['-pub_date', 'author']
要按发布日期降序,然后按作者升序,请使用以下命令:

ordering = ['pub_date']
ordering = ['-pub_date']
ordering = ['-pub_date', 'author']

在此处查找更多详细信息

我尝试使用相同的语法进行排序,进行迁移、迁移和运行服务器,但对我来说不起作用。我不知道发生了什么,因为这是文档中所述的语法。我们在使用Postgres时从来没有遇到过这个问题。您的代码看起来不错。如果省略
annotate
子句,它的排序是否正确?(只是想检查一下)嘿,@Risadinha你是对的,如果我删除
annotate
子句,它会正常工作。我怎样才能使它同时适用于排序和注释?在这种情况下,我建议先尝试Postgres。无论如何,您不会使用sqlite,我建议您首先切换到最终的DB供应商,而不是使用纯开发人员设置来解决问题。(如果还没有决定,请使用Postgres。)感谢@Risadinha的推荐,但这是一个模拟项目,不会上线,所以我暂时还是使用sqlite。