我制作了一个类似Twitter的社交网络,用户首先使用Django 3.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',)
我从views.py
查询数据库:
@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_by('-date_published')
时,它可以工作。为什么class Meta
中的ordering
不工作?我已经完成了所有迁移并迁移了数据库。ordering = ['-date_published']
也不起作用。
2条答案
按热度按时间von4xj4u1#
我有两个型号:
NameMixing
和Species
,它们是从前者继承而来的。NameMixing
提供了我想要排序的名称字段。NameMixing
是抽象的。添加ordering = ['name']
不起作用,将其添加到Species
可以。我在
Species
和NameMixing
中都有一个Meta
类。为了使Species
应用来自NameMixing
的所有Meta
(抽象除外),您还必须在Meta
类中应用继承,如文档中所述:当创建抽象基类时,Django使您在基类中声明的任何Meta内部类都可以作为属性使用。如果子类没有声明自己的元类,它将继承父类的元类。如果子级想要扩展父级的Meta类,它可以将其子类化。
Django确实对抽象基类的Meta类进行了一次调整:在安装Meta属性之前,它设置了Abstrate=False。这意味着抽象基类的子类本身不会自动成为抽象类。要创建从另一个抽象基类继承的抽象基类,需要显式设置该子类的抽象=True。
bqujaahr2#
每个字符串都是一个带有可选“-”前缀的字段名,表示降序。不带前导“-”的字段将按升序排列。使用字符串“?”随机点餐。
例如,要按pub_date字段升序排序,请使用以下命令:
要按发布日期降序排序,请使用以下命令:
要先按发布日期降序排序,然后按作者升序排序,请使用以下命令:
请在此处查找更多详细信息