下面是我的类的简化版本。我只想颠倒嵌入文档的顺序,这样最新的文档就会显示在第一位,而不是最后一位。
class User(Document):
username = StringField(unique=True)
userreviews = EmbeddedDocumentListField(Review)
class Review(EmbeddedDocument):
review_date = DateTimeField()
我第一次得到这样的用户:
the_user: QuerySet = user.User.objects.filter(
username=request.form["username"])
然后我得到了第一个用户,并使用slice获得了该用户的前10条评论(出于分页原因(:
review_query: QuerySet = the_user.fields(
slice__userreviews=[0, 10]).first()
在通过slice获得评论之前,我如何颠倒评论的顺序?我真的必须反向存储它们才能实现这一点吗?或者在存储它们之后有办法实现这一目标吗?
我会亲自回答这个问题,以防有人遇到同样的问题。EmbeddedDocumentListField
上的排序似乎有点受限。在我的课堂上更改字段要容易得多:
class User(Document):
username = StringField(unique=True)
userreviews = EmbeddedDocumentListField(Review)
到此:
class User(Document):
username = StringField(unique=True)
userreviews = SortedListField(EmbeddedDocumentField(Review),
ordering="review_date", reverse=True)
从那里我还可以切换到数组切片语法来对查询进行分页:
all_reviews = first_user.userreviews[0:10]