7

在 Django 中,调用object.manytomany.all().reverse()及其等效模板object.manytomany.all.reverse似乎不适用于多对多关系。

如何反转多对多关系的结果列表?

4

4 回答 4

5

您可能会遇到这个错误,或者我误解了您的代码片段。假设您有一个 Book 模型,其中 Book 的一个实例可以有多个作者。

class Author(models.Model):
  ...

class Book(models.Model):
  authors = models.ManyToManyField(Author)

现在这将返回QuerySet所有 Book 实例中的一个 -Book.objects.all()

objects是模型的默认管理器,它是复数形式。object在 Python 中是它自己的东西,最好不要将它用作你自己的变量。值得一提的是,“manytomany”不是 Django 中的字段或函数。让我们知道这是否是您定义的。因此,要获得 ManyToMany 多个作者,一个 book 实例可能具有:

book = Book.objects.all()[0]
type(book.authors)  # tells you this is a ManyRelatedManager
type(book.authors.all()) # tells you this is a QuerySet
book.authors.all()  # will print out the authors for this book

现在您有了作者,并且这些作者是 QuerySet 的形式,您可以执行任何正常的 QuerySet 操作,包括反转。

book.authors.all().reverse()

请记住,反转未排序的内容并没有多大意义,因此您可能需要考虑使用objects.order_by("<field name>").reverse(). 希望有帮助。

于 2012-02-20T04:26:54.137 回答
1

所以你可以这样做

object.manytomany.order_by("-id")
于 2021-04-11T18:42:57.920 回答
0

这可用于根据对象的属性按我们想要的顺序对对象进行排序。

Doubt.objects.all().order_by('-date_posted')
于 2021-04-11T13:49:29.783 回答
-2

书=反转(Book.objects.all())

于 2020-12-18T19:20:16.470 回答