Python Meta中的Django模型排序不起作用
我正在尝试建立一个类似于Twitter的社交网络,用户可以发布帖子,并且可以按时间倒序查看帖子(最新的帖子优先)。我正在使用Django3.1.7构建它 我已将我的模型定义如下: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
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。