【问题标题】:Getting objects.all() reverse() or descending order获取 objects.all() reverse() 或降序
【发布时间】:2012-03-10 11:17:54
【问题描述】:

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

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

【问题讨论】:

    标签: django django-templates many-to-many manytomanyfield django-orm


    【解决方案1】:

    所以你可以这样做

    object.manytomany.order_by("-id")
    

    【讨论】:

      【解决方案2】:

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

      Doubt.objects.all().order_by('-date_posted')
      

      【讨论】:

        【解决方案3】:

        book = reversed(Book.objects.all())

        【讨论】:

          【解决方案4】:

          您可能正在处理这个错误,或者我误解了您的代码 sn-p。假设您有一个 Book Model,其中 Book 的一个实例可以有多个作者。

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

          现在这将返回所有 Book 实例的 QuerySet - 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()。希望对您有所帮助。

          【讨论】:

          • 您可以使用 objects.order_by("-") 来代替 objects.order_by("").reverse() 进行降序。
          • 您可以创建一种方法,以便从模板中轻松调用此查询集。 IE。 object.get_m2m_reversed,里面调用self.manytomany.all().order_by('-somefield')
          猜你喜欢
          • 2021-12-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-05
          • 1970-01-01
          • 2010-11-13
          • 2021-05-15
          相关资源
          最近更新 更多